2016-08-04 177 views
2

委托报关无法从呈现视图控制器

// FolderListViewController.h 
#import <UIKit/UIKit.h> 
#import "Folder.h" 

@protocol FolderSelectionDelegate <NSObject> 

@required 
- (void)setFolder:(Folder *)folder; 

@end 

@interface FolderListViewController : UITableViewController 

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

- (IBAction)showDashboard:(id)sender; 

@end 

代表从didSelectRowAtIndexPath方法称为访问委托方法:

// FolderListViewController.m 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [self.delegate setFolder:dataSource[indexPath.row]]; 
} 

的VC应接收该消息

#import <UIKit/UIKit.h> 
#import "FolderListViewController.h" 
#import "Folder.h" 

@interface ProjectListViewController : UITableViewController <FolderSelectionDelegate, UISplitViewControllerDelegate, UISearchBarDelegate, UINavigationControllerDelegate> 

@property (nonatomic,retain)UIActivityIndicatorView *activityIndicatorObject; 
@property (nonatomic, copy)Folder *folder; 


-(void)loadProjects:(Folder*)folder; 

@end 

介绍VC的行动

- (void)foldersButtonTapped { 
    UINavigationController *vc = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"FolderListNavController"]; 
    vc.delegate = self; 
    [self presentViewController:vc animated:YES completion:nil]; 
} 

委托方法实现

- (void)setFolder:(Folder *)folder { 
    _folder = folder; 
    [self loadProjects:folder]; 
} 

我已经经历了多线程上读到这里,还没有任何运气。起初,我在展示FolderListVC(即vc.delegate = self)时没有引用ProjectListVC设置。虽然这似乎不是问题。我正在研究为iPad构建的应用程序,并将其扩展到所有设备上。这里的实现工作(它被设置为分割视图控制器)。任何帮助将不胜感激

+0

它在我看来你是设置'UINavigationController'的委托,而不是你的委托。您需要在“FolderListViewController”实例上设置委托。您也可以将您的委托属性重命名为'folderSelectionDelegate',以避免混淆。 – albertamg

+1

非常感谢 - 这表明我朝着正确的方向 – user1987502

回答

0

我认为,UINavigationcontroller创建问题,因为它没有设置FolderListViewController委托。你可以尝试这样。

FolderListViewController *vc=[self.storyboard instantiateViewControllerWithIdentifier:@"FolderListViewController"]; 

    vc.delegate=self; // protocol listener 
    [self.navigationController pushViewController:vc animated:YES]; 
+0

谢谢!最后以这种方式实现它,所以我仍然可以呈现视图控制器并在顶部维护导航栏: 'FolderListViewController * vc = [self.storyboard instantiateViewControllerWithIdentifier:@“FolderListPhone”]; UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc]; vc.delegate = self; [self presentViewController:nav animated:YES completion:nil];' – user1987502

+0

尼斯:) ..解决了这两个问题 – Nilesh

相关问题