如果在iOS中触发UIBarButtonItem操作,如何调用其他方法?

时间:2014-09-17 10:32:12

标签: ios iphone ios7 uibarbuttonitem

我正在创建一个iPhone应用程序。目前我正在显示我的"第一个" 类的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];

请告诉我一些我可以实现输出的方法。提前谢谢!

3 个答案:

答案 0 :(得分:0)

与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
}

希望这就是你要找的东西。

答案 1 :(得分:0)

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

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

所以在调用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
 //...
 //...
}

注意:我希望您能够了解并理解我的答案。如果不是,请告诉我,以便我编辑答案,使其更容易理解。

答案 2 :(得分:0)

使用NSNotificationCenter

可以实现您的目标

在你的viewController1(我猜你正在开始使用滑块)启动滑块时,你可以添加一个观察者并添加选择器stopSlider

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

并添加名为stopSlider

的选择器
-(void)stopSlider{
    // Code For Stopping Slider here
}

现在,当您想要停止滑块时,可以从任何其他ViewController发布stopSliderNotification,它将使用以下代码调用stopSlider的{​​{1}}选择器

viewController1

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