Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在一个视图控制器中创建UIButton的iAction,并影响另一个视图控制器中的操作_Ios_Objective C_Uiviewcontroller_Uibutton_Ibaction - Fatal编程技术网

Ios 在一个视图控制器中创建UIButton的iAction,并影响另一个视图控制器中的操作

Ios 在一个视图控制器中创建UIButton的iAction,并影响另一个视图控制器中的操作,ios,objective-c,uiviewcontroller,uibutton,ibaction,Ios,Objective C,Uiviewcontroller,Uibutton,Ibaction,我计划创建两个UIViewController。基本上,在两个视图控制器之一中有一些按钮。当我按下其中一个按钮时,我想在另一个视图控制器中触发一些操作。有什么方法可以让它成为可能吗?有三种方法可以做到这一点 使用NSNotificationCenter,使用委托,最后一个是使用块,第一个选项很容易学习 将观察者添加到FirstViewController中 在SecondViewController中发布通知(当用户单击按钮时) 参考如下 希望这有帮助是的,您可以使用一个代理 例如,您可能有此视

我计划创建两个UIViewController。基本上,在两个视图控制器之一中有一些按钮。当我按下其中一个按钮时,我想在另一个视图控制器中触发一些操作。有什么方法可以让它成为可能吗?

有三种方法可以做到这一点

使用
NSNotificationCenter
,使用
委托
,最后一个是使用
,第一个选项很容易学习

  • 将观察者添加到FirstViewController中
  • 在SecondViewController中发布通知(当用户单击按钮时)
  • 参考如下


    希望这有帮助

    是的,您可以使用一个代理

    例如,您可能有此视图控制器

    //FirstViewController.h
    
    @protocol ProtocolName <NSObject>
    
      - (void)doSomething;
    
    @end
    
    @interface FirstViewController
    
     @property (nonatomic, strong) id<ProtocolName> delegate;
    
     @property (weak, nonatomic) IBOutlet UIButton *button;
    
     - (IBAction)action:(id)sender;
    
    @end
    
    魔法来了

    假设当您点击FirstViewController中的按钮时,它会触发SecondViewController中的doSomething方法。所以,你需要这样做

    //FirstViewController.m
    
    //...
    SecondViewController secondVC = [[SecondViewController alloc] init];
    this.delegate = secondVC; //DON'T FORGET THIS
    //...
    
    - (IBAction)action:(id)sender{ 
     [this.delegate doSomething];
    }
    

    这是委托模式。

    使用委托方法。在addTarget方法中,放置另一个viewcontroller。
    //SecondViewController.m
    
    - (void)doSomething{
      //Do something
    }
    
    //FirstViewController.m
    
    //...
    SecondViewController secondVC = [[SecondViewController alloc] init];
    this.delegate = secondVC; //DON'T FORGET THIS
    //...
    
    - (IBAction)action:(id)sender{ 
     [this.delegate doSomething];
    }