代码之家  ›  专栏  ›  技术社区  ›  Chris F

在IOS中,如何将另一个对象的功能作为选择器?

  •  0
  • Chris F  · 技术社区  · 7 年前

    selector as parameter in IOS

    在我的例子中,我正在创建一个Objective-C(非Swift)主/细节应用程序,并希望使用以下init函数创建UIViewController类型的DetailController对象

    详细介绍ViewController。h

    @interfact DetailViewController : UIViewController
    - (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector
    @end
    

    ... 详细介绍了ViewController。m

    - (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector
    {
      self = [super initWithNibName:nibName bundle:nil];
      if (self) {
            UIBarButtonItem *done = [[UIBarButtonItem alloc]
                                     initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                     target:self
                                     action:saveSelector];
            [[self navigationItem] setRightBarButtonItem:done animated:YES];
      }
      return self;
    }
    

    现在我有了另一个视图控制器

    @interface AnotherViewController : UIViewController
    - (void)saveSelector:(id)sender;
    @end
    

    ),我使用上面的视图控制器,就像这样。。。

    AnotherViewController *avc = [[AnotherViewController alloc] init];
    DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"AnotherViewController" withSaveSelector:@selector(???)];
    

    我应该在里面放什么???所以我可以将另一个ViewController::saveSelector()函数传递给DetailViewController?

    我希望这有意义。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Torongo    7 年前

    将方法更改为:

    - (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector forTarget:(id)target
    

    这样称呼:

    DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"AnotherViewController" withSaveSelector:@selector(saveSelector:) forTarget:avc];
    

    在里面 DetailViewController.m

    - (id)initWithNibName:(NSString *)nibName withSaveSelector:(SEL)saveSelector  forTarget:(id)target
    {
      self = [super initWithNibName:nibName bundle:nil];
      if (self) {
            UIBarButtonItem *done = [[UIBarButtonItem alloc]
                                     initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                     target:target
                                     action:saveSelector];
            [[self navigationItem] setRightBarButtonItem:done animated:YES];
      }
      return self;
    }