我有一些类,让我们称之为A,B和C,继承自UIViewController和某些类别的UIViewController,其中有一些方法必须对所有类都是通用的。
类别的方法必须在ViewControllers上调用另一种方法,但是。并非所有方法都将在VC中实现(因为它们永远不会在该上下文中被调用)
如果我在类别中编写方法定义,我会收到一个错误,该方法未声明,但它在VC中声明或未声明,并且永远不会在该上下文中使用。
有没有想法如何覆盖这个并在多个ViewControllers之间共享大部分代码(导航代码)?
- (void)homeButtonPressed {
NSLog(@"Home button pressed, ViewController");
}
- (void)changeFloorButtonPressed {
[self changeFloor];
NSLog(@"Change Floor button pressed, ViewController");
}
- (void)QRButtonPressed {
NSLog(@"QR button pressed, ViewController");
}
此处[self changeFloor];
是方法,仅针对一个ViewController。
答案 0 :(得分:1)
创建一个objective-c协议,为@optional
声明-(void)changeFloor;
方法
然后,在您的类别中,遵守该协议。您将能够调用changeFloor方法而不会出现编译错误。
因为该方法是可选的,您必须检查是否:
[self respondsToSelector:@selector(changeFloor)]
在调用changeFloor之前。
编辑:可能有一种方法来构建您的代码,以便您不需要这样做。
答案 1 :(得分:1)
为什么要注意创建类型为UIViewController的基类,然后创建从新基类继承的类。然后每个孩子都可以实施他们需要的方法。
MyBaseViewController:UIViewController
ViewAViewController:MyBaseViewController
ViewBViewController:MyBaseViewController
等
我将此类方法用于通用应用程序,我的子类可以覆盖父项的实现或添加到它。
//常见元素 HomeViewController:UIViewController
// iPhone特定的实现 HomeViewController_iPhone:HomeViewController
// iPhone特定的实现 HomeViewController_iPad:HomeViewController