2014-10-29 2 views
0

Я использую контроллер Split View для iPad. Я пытаюсь отправить смену ярлыка в контроллер детализации из контроллера rootSending Controll, когда кнопка нажата. Я прочитал учебники по протоколам и придумал код ниже. Когда я нажимаю кнопку на rootSending, ничего не происходит с меткой на detailReceiving. Нужно ли мне что-то делать с помощью splitViewContoller, чтобы метка обновлялась? Должна ли функция detailReceive изменять метку, когда она получает сообщение?UISplitViewController с использованием делегата для передачи строки

rootSending.h

#import <UIKit/UIKit.h> 
@protocol TestDelegate <NSObject> 
-(void)tester:(NSString*)testString; 
@end 

@interface rootSending : UIViewController 
@property (nonatomic, assign) id <TestDelegate> delegate; 
@end 

rootSending.m

#import "rootSending.h" 

@implementation rootSending 
@synthesize delegate; 
-(void)viewDidLoad{ 

} 
-(IBAction)buttonPressed:(id)sender{ 

[delegate tester:@"button pressed"]; 
} 

@end 

detailReceiving.m

#import "detailReceiving.h" 
#import "rootSending.h" 
@interface detailReceiving()<TestDelegate>{ 
IBOutlet UILabel *label2; 
} 
@end 
@implementation detailReceiving 
-(void)viewDidLoad{ 
rootSending *obj = [rootSending alloc]; 
obj.delegate = self ; 
} 
-(void)tester:(NSString *)testString{ 
label2.text = testString; 
} 

@end 

ответ

0

Прежде всего, никогда не когда-либо иметь Alloc без инициализации! Но в этом случае, даже если вы использовали alloc/init, он все равно не сработает, потому что это просто создает новый экземпляр rootSending, а не тот, который у вас есть в вашем режиме разделения. Вы должны получить ссылку на тот, который вы имеете, что вы можете получить от расщепленного контроллера представления,

-(void)viewDidLoad{ 
rootSending *obj = (rootSending *)self.splitViewController.viewControllers.firstObject; 
obj.delegate = self; 
} 

После Edit:

Если ваш контроллер помощник встроен в навигации контроллер, то вам нужно чтобы получить topViewController контроллера навигации, чтобы получить вашу ссылку.

-(void)viewDidLoad{ 
    UINavigationController *nav = (UINavigationController *)self.splitViewController.viewControllers.firstObject; 
    xmlListOfItems *obj = (xmlListOfItems *)nav.topViewController; 
    obj.delegate = self; 
    } 
+0

Отлично! Хороший совет по распределению. Я просто знал, что не хочу его начинать. – iDev

+0

Что делать, если раскадровка - это splitview -> контроллер навигации -> вид? Это не работает: xmlListofItems * obj = (xmlListofItems *) self.splitViewController.navigationController.viewControllers.firstObject; – iDev

+0

@ iDEV, вам действительно нужно подумать о своей структуре контроллера и о том, как ваши контроллеры связаны друг с другом - это очень важные базовые знания о программировании на iOS, которые вы должны изучить. Я обновил свой ответ, чтобы показать вам, как это сделать, но вам нужно научиться изучать этот материал. – rdelmar

Смежные вопросы