我有一个父级的ViewController(SearchViewController),它可以继承TableViewController(FilterTableViewController),用户可以在TableView中选择人员。选择存储在名为selectedpersonArray的NSMutableArray中,该工作已经很好。但是现在我需要将它们传递回父ViewController。我试图实现一个协议/委托。由于我是新来的Objective-C,我不恰当地理解一些地方,这是行不通的:委托/协议不起作用:将数组从TableViewController传递给父ViewController
FilterTableViewController.h(儿童控制器)
@protocol filterDelegate <NSObject>
-(void)addArraytoSearchViewController:(NSMutableArray *)array;
@end
@interface FilterTableViewController : UITableViewController
@property (nonatomic, assign) id <filterDelegate> selectedpersonDelegate;
@property (nonatomic, retain) NSMutableArray *selectedpersonArray;
@end
FilterTableViewController.m
#import "FilterTableViewController.h"
@interface FilterTableViewController()
@end
@implementation FilterTableViewController
...
@synthesize selectedpersonArray;
@synthesize selectedpersonDelegate;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[[self selectedpersonDelegate] addArraytoSearchViewController:selectedpersonArray];
NSLog(@"personarray: %@", selectedpersonDelegate);
}
问题1:我可以在NSLog中显示委托吗?这里它返回nil,但selectedpersonArray包含值。 问题2:有没有更好的地方传递数组比didSelectRowAtIndexPath,因为多个选择都是可能的,只有当后退按钮被按下时才能传递数组。我可以使用* - (void)prepareForSegue :(UIStoryboardSegue )segue sender:(id)sender?
SearchViewController.h:(父视图)
#import "FilterTableViewController.h"
@interface SearchViewController: UIViewController <UITableViewDataSource, UITableViewDelegate, filterDelegate>
SearchViewController.m:
@implementation SearchViewController
...
- (void)viewDidLoad{
FilterTableViewController * FTC = [[FilterTableViewController alloc] init];
FTC.delegate = self;
- (void)addArraytoSearchViewController:(NSMutableArray *)array {
NSLog(@"%@", array);
}
问题3:的NSLog不会在这里做什么?怎么啦? 问题4:如何从第二个ViewController传递多个数组?
在此先感谢!
如何显示过滤器tableview控制器? –
我正在与故事板,并有一个segview到tableview控制器。我可以使用准备for segue函数将数据推送到它。 – user2014551
您应该分配selectedpersonDelegate。而不是FTC.delegate = self;你应该写FTC。 selectedpersonDelegate = self; – Darshana