2013-03-21 79 views
0

這是我的代碼。我如何獲得超類目標的子類UIButton標題c

@interface MasterViewController : UIViewController{ 

} 
-(void) initCallService; 
@end 

@implementation MasterViewController 
-(void) initCallService{ 

} 
@end 

其它類,這是子類的上述

@interface DetailViewController : MasterViewController{ 
    IBOutlet UIButton *btn; 
} 
@end 


@implementation DetailViewController 
-(void) btntitle_changed{ 
    [btn setTitle:[self.arr objectAtIndex:recordIndex] forState:UIControlStateNormal]; 
} 
@end 

我需要每當DetailViewController類的btntitle_changed方法的標題改變它發送到MasterViewControllerinitCallService方法。我不知道如何用類層次結構實現這一點。任何人都可以指導我嗎?有效的答案將不勝感激。

+0

請編輯您的問題。你到底想做什麼? – Petar 2013-03-21 09:39:43

+0

在MasterVC需要一個屬性'NSString * buttonTitle','[super setButtonTitle:btn.title]' – 2013-03-21 09:41:14

+0

我需要MasterViewController的「initCallService」方法中的btn(在DetailViewController中定義)標題 – 2013-03-21 09:43:17

回答

0

你需要MasterViewController物業說NSString *buttonTitle

-(void) btntitle_changed{ 
    [btn setTitle:[self.arr objectAtIndex:recordIndex] forState:UIControlStateNormal]; 
    [super setButtonTitle:btn.title]; 
} 
+0

感謝@Anoop Vaidya提供了這麼好的幫助。 – 2013-03-21 12:44:27

0

有可能通過在DetailViewController.h

  @protocol TitleChange <NSObject> 
      -(void)initCallService:(NSString *)title; 
     @end 

設置協議

,並設置屬性爲

 @property(nonatomic,assign) id <TitleChange> delegate; 

     In DetailViewController.m 

    -(void) btntitle_changed 
     { 
     [btn setTitle:[self.arr objectAtIndex:recordIndex] forState:UIControlStateNormal]; 
     [self.delegate initCallservice: btn.title] 
     } 

在你MasterViewContoller.h添加TitleChange委託作爲

@interface MasterViewController : UIViewController<TitleChange>{ 

    } 

在你MasterViewContoller.m同時啓動DetailViewController

DetailViewController *vc =[[DetailViewController alloc] :@"DetailViewController" bundle:nil]; 
    vc.delegate=self 
    [self presentViewController:vc animated:YES completion:nil]; 

這是怎麼了協議,並委託其被廣泛用於傳遞數據,只是去通過它的基礎知識

+0

爲什麼被低估了 – 2013-03-21 09:53:41

+0

原因與我在其他協議中所說的一樣 - 答案:對於一般的對象間通信而言,這是一個好主意,但不適用於類層次結構。子類本質上最終會成爲它自己的代表。 – 2013-03-21 09:59:55

0

只需將您的-(void)initCallService更改爲-(void)initCallServiceWithButtonTitle:(NSSTring*)title。 然後更改btntitle_changed功能如下:

-(void) btntitle_changed{ 
    [btn setTitle:[self.arr objectAtIndex:recordIndex] forState:UIControlStateNormal]; 
    [super initCallServiceWithButtonTitle:btn.title]; 
} 

-(void)initCallServiceWithButtonTitle:(NSString*)title{ 
//do whatever you want with 'title' 
}