1

现在我正在使用委托,但我怀疑它的形式不好。

UIBarButtonItem我以编程方式在众多不同的视图控制器中创建一个相同的。

我的按钮的目标是myAppDelegate,它的动作是在其中定义的。

有什么更好的方法来做到这一点?或者我只是应该将相同的操作复制并粘贴到实例化相同条形按钮的不管有多少视图控制器中?

好的,现在假设该操作在所有方面都是相同的,但有一个:它的不同之处在于它应该向视图控制器发送一个 presentViewController 消息,该视图控制器实例化了发送该操作的按钮。因此,在操作中,我可以发送presentViewController消息到sender,这是按钮的一个实例,但我不知道如何到达实例化该按钮实例的视图控制器。

4

2 回答 2

1

每个视图控制器只需要在创建按钮时将自己设置为按钮的目标。然后按钮的动作选择器将被发送到正确的控制器。

至于选择器本身,创建一个类别UIViewController以包含按钮的操作:

@implemenation UIViewController (MKCBarButtonItemAction)

- (void)MKCDoThatThingIDo
{
    // Do things.

    [self presentViewController:[self theOtherViewControllerWhatINeedToDisplay]
                       animated:YES
                     completion:^{
                        // Do more things.
                    }];

    // Do yet other things.

}

@end
于 2013-05-15T06:05:51.827 回答
0

如果您在AppDelegate文件中定义了多个视图控制器的通用方法,那么您可以使用委托对象调用这些操作,例如,

#define appDelegateObj (AppDelegate *)[UIApplication sharedApplication].delegate;

AppDelegate你的委托文件类名在哪里,还要在全局定义这个宏,这样你就可以从任何地方访问它,

现在你想在哪里调用任何函数,只需使用 like[appDelegateObj functionName];

这是一件事,如果您可以将类方法制作成委托文件,那么它可以与使用类名一起使用,例如[AppDelegate functionName]; 

类方法定义为like +(void)functionName{...} ,它不能访问类实例变量和方法。

于 2013-05-15T05:35:21.060 回答