Objective-C类自定义类的调用方法

时间:2014-08-20 23:18:55

标签: ios objective-c uiviewcontroller objective-c-category

我有一些类,让我们称之为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。

2 个答案:

答案 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