2013-03-21 4 views
0

Вот мой код.как получить подкласс UIButton title в объекте суперкласса 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 

мне нужно всякий раз, когда заголовок изменяется в btntitle_changed методе DetailViewController класса, чтобы отправить его initCallService метод MasterViewController «s. Я не знаю, как я могу достичь этого с помощью иерархии классов. Может ли кто-нибудь направить меня на это? Действительный ответ будет оценен.

+0

Пожалуйста, измените вопрос. Что именно вы хотите сделать? – Petar

+0

необходимо свойство 'NSString * buttonTitle' в MasterVC,' [super setButtonTitle: btn.title] ' –

+0

Мне нужен заголовок btn (который задан в DetailViewController) в методе« initCallService »MasterViewController –

ответ

0

Вам нужна недвижимость в MasterViewController сказать NSString *buttonTitle

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

Спасибо @Anoop Vaidya за такую ​​приятную помощь. –

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

почему его было downvoted –

+0

причина такая же, как я сказал в другом протоколе-ответ: это хорошая идея для общего взаимодействия между объектами, но не для классов-иерархий. подкласс, по существу, станет его собственным делегатом. –

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' 
} 
Смежные вопросы