我应该如何在不同的vc中执行(几乎)相同的操作?(答案:使用分类)



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

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

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

做这件事的更好的方法是什么?或者我只是应该复制和粘贴相同的操作到,无论有多少视图控制器实例化相同的栏按钮?

好,现在假设动作在所有方面都是相同的,除了一个:它的变化只在于它应该发送一个presentViewController消息给实例化发送动作的按钮的视图控制器。因此,在动作中,我可以发送presentViewController消息到sender,这是按钮的实例,但我知道没有办法到达实例化按钮实例的视图控制器。

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

至于选择器本身,在UIViewController上创建一个类别来包含按钮的动作:

@implemenation UIViewController (MKCBarButtonItemAction)
- (void)MKCDoThatThingIDo
{
    // Do things.
    [self presentViewController:[self theOtherViewControllerWhatINeedToDisplay]
                       animated:YES
                     completion:^{
                        // Do more things.
                    }];
    // Do yet other things.
}
@end

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

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

其中,AppDelegate是你的委托文件类名,也在全局定义这个宏,这样你就可以从任何地方访问它,

现在无论何时你想调用任何函数,只要使用像[appDelegateObj functionName];

这里有一件事,如果你可以把类方法变成委托文件,那么它可以使用使用类名,如[AppDelegate functionName];

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

相关内容

最新更新