Вызывание функции от контроллера другого представления для iPhone

У меня есть проблема, где я хочу назвать функцию, определяемую в одном контроллере представления от другого контроллера. I'v пробуют то, что кажется llke сто различных установок, и ничто, кажется, не работает.

Я отправил абсолютный код, и надеялся, что кто-то мог сказать мне, как они сделают это. В основном все, что я хочу сделать, назвать функцию, определяемую MYBPress в SwitchViewController от GameViewController, когда dealB кнопка нажимается. Любая справка значительно ценилась бы. PS: Я кодировал в течение долгого времени, но realtivly в новинку для Obj-C

// ------- SwitchViewController.h  ---------------
#import <UIKit/UIKit.h>
@class GameViewController;
@class OptionsViewController;

@interface SwitchViewController : UIViewController {
 OptionsViewController *optionsViewController;
}  

@property ( retain, nonatomic ) OptionsViewController *optionsViewController;
@property ( retain, nonatomic ) GameViewController *gameViewController;
-(IBAction)MyBPress:(id)sender;
@end


//  --------  GameViewController.h ------------

#import <UIKit/UIKit.h>

@interface GameViewController : UIViewController {
   IBOutlet UIButton    *dealB; 
}
@property(nonatomic,retain) IBOutlet UIButton    *dealB;
- (IBAction)dealB:(id)sender;
@end


//  -------  GameViewController.m
#import "GameViewController.h"

@implementation GameViewController
@synthesize dealB;          // The Deal button

- (IBAction)dealB:(id)sender
{
   //  Here is where I want to call the MyBPress function
}

@end
5
задан 5 March 2010 в 18:22
поделиться

3 ответа

"Привет всем, у меня проблема, когда я хочу вызвать функцию, определенную в одном контроллере представления из другого контроллера. Я перепробовал, кажется, сотню различных настроек, но ничего не работает."

Это потому, что это плохой дизайн. Контроллеры не должны напрямую общаться друг с другом.

Вы должны рассмотреть возможность использования делегатов, уведомлений или какого-то общего центрального объекта.

5
ответ дан 18 December 2019 в 05:40
поделиться

Почему бы просто не использовать кнопку для отправки обоих сообщений напрямую их контроллерам? Экземпляры UIButton по своей сути способны отправлять несколько сообщений нескольким целям. Чтобы настроить кнопку, вы можете отправить следующее сообщение столько раз, сколько необходимо:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

Вы также можете подключить кнопку в Интерфейсном Разработчике, чтобы сделать то же самое.Или смешайте и сопоставьте, сколько душе угодно.

1
ответ дан 18 December 2019 в 05:40
поделиться
/* Ok, so based on a suggestion to use Notifications, I solved my problem.  It's
actually so simple, it ridiculous I had so much trouble with it.   Thought I'd 
post it just in case some other newbie hits the same type issue.
*/

// in the SwitchViewController.m  I added this.  This sets it up so 
// when the dealNotification
// is triggered, the HideBar function I have defined in SwitchViewController 
// gets called.
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(HideBar) name:@"dealNotification" object: nil];


// in the GameViewController.m where I want to call the function in the other controller,
// I added this and it send the notification to run the function
[[NSNotificationCenter defaultCenter] postNotificationName:@"dealNotification" object: nil];
25
ответ дан 18 December 2019 в 05:40
поделиться