Я прошел через большинство предыдущих связанных сообщений, но хотя я правильно их соблюдал (насколько я понял), я просто не могу вызвать метод делегата для кода ниже ,Пользовательский делегат с модальным листом формы не работает
Цель: ModalView генерирует строку *SQL_String
. Нажмите DONE, чтобы закрыть ModalView и вызвать метод делегата в родительском представлении, чтобы получить это значение *SQL_String
.
SearchModalViewController.h
@protocol SearchControllerDelegate
- (void)didDismissModalView:(NSString *)SQL_String;
@end
@interface SearchModalViewController : UIViewController
@property (nonatomic, assign) id <SearchControllerDelegate> searchDelegate;
- (IBAction)handleDone:(id)sender;
SearchModalViewController.m
@interface SearchModalViewController()
@end
@implementation SearchModalViewController
@synthesize searchDelegate;
- (IBAction)handleDone:(id)sender {
[self dismissView:sender];
}
- (void)dismissView:(id)sender {
[searchDelegate didDismissModalView:@"Test"];
[self dismissViewControllerAnimated:YES completion:nil];
}
DetailViewController.m (Мой родительский View Controller)
@interface DetailViewController() <SearchControllerDelegate>
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
SearchModalViewController *searchModal = [[SearchModalViewController alloc] init];
searchModal.searchDelegate = self;
}
ПРОБЛЕМА:
Ниже метод делегата не получает сигнал.
- (void)didDismissModalView:(NSString *)SQL_String {
[self dismissViewControllerAnimated:YES completion:nil];
NSLog(@"The string = %@", SQL_String);
}
Любая идея, где я делаю неправильно?
EDIT: Спасибо, ребята. С вашими быстрыми предложениями я могу закрыть его, добавив ниже код вместо моего предыдущего соединения IB.
- (IBAction)showSearchModal:(id)sender {
SearchModalViewController *searchModal = [self.storyboard instantiateViewControllerWithIdentifier:@"search"];
searchModal.searchDelegate = self;
searchModal.modalPresentationStyle = UIModalPresentationFormSheet;
searchModal.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:searchModal animated:YES completion:nil];
}
Можете ли вы показать код, в котором вы представляете «SearchModalViewController»? почему вы создаете его локально внутри 'viewDidLoad'? не исчезает ли этот экземпляр после возвращения 'viewDidLoad'? – nburk
@nburk, я попытался изменить его ниже, но делегат до нуля. property (strong) SearchModalViewController * SearchModal; или интерфейс DetailViewController: UIViewController { SearchModalViewController * SearchModal; } –
anuj
ok, пожалуйста, покажите код, в котором вы называете 'presentViewContrller:'. и еще одно: пожалуйста, обновите свой вопрос кодом, а не помещайте его в комментарии :) – nburk