【问题标题】:How to call other method if UIBarButtonItem action is fired in iOS?如果在 iOS 中触发 UIBarButtonItem 操作,如何调用其他方法?
【发布时间】:2014-09-17 10:32:12
【问题描述】:

我正在创建一个 iPhone 应用程序。目前我正在显示我的 "first" 类的 UIBarButtonItem,目标是 "second" 类,所以我将 UIBarButtonItem 操作方法提供给第二类。它工作正常。

这是我的第一类代码,目标是第二类,即“revealController”:

UIBarButtonItem *rightRevealButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"MENU"
style:UIBarButtonItemStyleBordered target:revealController action:@selector(rightRevealToggle:)];

这是我的第二类 UIBarButtonItem 方法:

- (void)rightRevealToggle:(id)sender
{    
    [self rightRevealToggleAnimated:YES];
}

现在,我的问题是我在第一堂课中显示幻灯片图像,所以当用户点击“rightRevealToggle”即 UIBarButtonItem 操作方法时,我需要停止幻灯片放映。如果目标相同,那么很容易设置幻灯片放映停止动作以及 UIBarButtonItem 动作方法。但在我的情况下,我在我的第一堂课中使用幻灯片放映,它没有声明给第二堂课。

这是我的幻灯片停止方法,当用户点击 UIBarButtonItem 操作方法时我需要调用它

[slideshow stop];

请给我一些方法来实现我的输出。提前致谢!

【问题讨论】:

    标签: ios iphone ios7 uibarbuttonitem


    【解决方案1】:

    与 barbuttonitem 初始化一起分配一个属性revealController(例如命名为FirstController。)

    RevealController.h

    @property (nonatomic, strong) FirstController *firstController;
    

    FirstController.m

    - (void) viewDidLoad () {
    
    ....
    
    [revealController setFirstController: self];
    ....
    UIBarButtonItem *rightRevealButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"MENU"
    style:UIBarButtonItemStyleBordered target:revealController action:@selector(rightRevealToggle:)];
    
    ....
    }
    

    RevealController.m

    - (void)rightRevealToggle:(id)sender
    {    
        [self rightRevealToggleAnimated:YES];
    
        // call instance method of FirstController
    
       [firstController stopSlideShow]; // this will navigate your pointer to FirstController class where you can access slide show method and properties
    }
    

    希望这是您正在寻找的。​​p>

    【讨论】:

    • 对不起,我可以看到你已经接受了我的回答,但没有投票。点击 0 上方的向上箭头按钮。
    【解决方案2】:

    你想要的可以使用NSNotificationCenter实现

    在您的viewController1(我想您正在启动滑块)中,当您启动滑块时,您可以添加观察者并添加选择器stopSlider

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopSlider) name:@"stopSliderNotification" object:nil];
    

    并添加一个名为 stopSlider 的选择器

    -(void)stopSlider{
        // Code For Stopping Slider here
    }
    

    现在,当您想要停止滑块时,您可以从任何其他 ViewController 发布 stopSliderNotification,它会使用以下代码调用 viewController1stopSlider 选择器

     [[NSNotificationCenter defaultCenter] postNotificationName:@"stopSliderNotification" object:nil];
    

    这对这种情况很有效,希望对您有所帮助。

    【讨论】:

    • 感谢@Bhumit 的回答..!
    【解决方案3】:

    简而言之,您必须在方法 rightRevealToggle 中获取第一个 Class 的实例,然后调用 [instanceOfFirstClass stop];

    说 FirstClass(eg:insFirstClass) 的实例已加载到正在播放幻灯片的内存中。我假设它在 FirstClass.h 中声明了一个停止方法

    所以在调用 rightRevealToggle 的 SecondClass 中,我假设您的 FirstClass 实例 insFirstClass 仍在内存中并正在运行幻灯片放映方法。

    现在您必须访问已在内存中运行幻灯片放映的 FirstClass 的 insFirstClass 实例(例如:您已将该实例推送到 navigationController 中)。

    insFirstClass 是在你持有的 SecondClass 方法内之后

    -(void)rightRevealToggle:(id)sender
    {
     //your extra logic
     //...
     //...
      FirstClass *insFirstClassInSecondClass = [from navigationcontroller.viewcontrollers or any other blah blah stuff];
      [insFirstClassInSecondClass stop];
    
     //your extra logic
     //...
     //...
    }
    

    注意:我希望你能得到一个想法并理解我的回答。如果不是,请告诉我,以便我编辑答案以使其更易于理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 2016-08-17
      • 2023-03-10
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多