Вызов функции из другого контроллера представления для iphone - PullRequest
5 голосов
/ 05 марта 2010

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

Я опубликовал основной код и надеялся, что кто-нибудь скажет мне, как они это сделают. По сути, все, что я хочу сделать, это вызвать функцию MYBPress, определенную в SwitchViewController из GameViewController при нажатии кнопки dealB. Любая помощь будет принята с благодарностью. PS: я давно программировал, но я действительно новичок в 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

Ответы [ 3 ]

25 голосов
/ 05 марта 2010
/* 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];
5 голосов
/ 05 марта 2010

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

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

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

1 голос
/ 05 марта 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...