2010-03-05 34 views
5

Tôi gặp sự cố khi tôi muốn gọi hàm được xác định trong một bộ điều khiển chế độ xem từ bộ điều khiển khác. Tôi sẽ thử những gì có vẻ llke một trăm thiết lập khác nhau và không có gì dường như làm việc.Gọi hàm từ bộ điều khiển chế độ xem khác cho iphone

Tôi đã đăng mã cơ bản và hy vọng một người nào đó có thể cho tôi biết họ sẽ làm như thế nào. Về cơ bản tất cả những gì tôi muốn làm là gọi hàm MYBPress được định nghĩa trong SwitchViewController từ GameViewController khi nút dealB được nhấn. Mọi sự trợ giúp sẽ rất được trân trọng. PS: Tôi đã được mã hóa trong một thời gian dài, nhưng tôi realtivly mới để 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 

Trả lời

5

"Hi All, Tôi có một vấn đề mà tôi muốn gọi một chức năng được xác định trong một bộ điều khiển xem từ bộ điều khiển khác. Tôi đang thử những gì có vẻ llke một trăm thiết lập khác nhau và không có gì có vẻ để làm việc. "

Điều này là do thiết kế kém. Bộ điều khiển không nên trực tiếp nói chuyện với nhau.

Bạn nên cân nhắc việc sử dụng đại biểu, thông báo hoặc một số thực thể trung tâm được chia sẻ.

+0

Cảm ơn bạn đã nhập. Nó là một thiết kế tồi? Có lẽ, nhưng câu hỏi là, nó có thể được thực hiện. –

+0

Xin chào, St3fan, tôi đã quay lại và thử lại bằng NsNotificationCenter và làm cho nó hoạt động. Tôi đã thử nó trước đó nhưng rõ ràng là không làm đúng. Sự thất vọng của tôi đã khiến tôi thử các phương pháp độc đáo :-) Nhận xét của bạn khiến tôi nhìn lại nó và tôi đã tìm ra nó, vì vậy cảm ơn cho đầu vào. –

1

Tại sao không chỉ có một nút gửi cả hai tin nhắn trực tiếp đến bộ điều khiển tương ứng? Các cá thể của UIButton vốn có khả năng gửi nhiều thư đến nhiều mục tiêu. Để định cấu hình nút, bạn có thể gửi thông báo sau nhiều lần nếu cần:

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

Bạn cũng có thể kết nối nút trong Trình tạo giao diện để thực hiện tương tự. Hoặc trộn và kết hợp với nội dung trái tim của bạn.

+0

Cảm ơn bạn đã biết chút thông tin. Không bao giờ nghĩ đến việc cố gắng nhưng tôi sẽ nhớ nó để tham khảo trong tương lai. –

25
/* 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]; 
+0

Điều này làm việc hoàn hảo cho tôi. – sridvijay

+0

@Rick nó là tuyệt vời ... Cảm ơn – death7eater

Các vấn đề liên quan