【发布时间】:2013-02-05 22:53:19
【问题描述】:
我有一个父 ViewController (SearchViewController),它连接到一个 TableViewController (FilterTableViewController),用户可以在 TableView 中选择人员。选择存储在一个名为 selectedpersonArray 的 NSMutableArray 中,它已经可以正常工作了。但现在我需要将它们传递回父 ViewController。我试图实现一个协议/委托。由于我是 Objective-C 的新手,我无法正确理解某些部分并且它不起作用:
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 更好的传递 Array 的地方,因为可以进行多个选择,并且只有按下 Back 按钮时才能传递 Array。我可以使用 *- (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 传递多个 Array?
提前致谢!
【问题讨论】:
-
过滤表视图控制器是如何呈现的?
-
我正在使用情节提要,并且 tableview 控制器有一个 segue。我可以使用 prepare for segue 功能将数据推送到它。
-
您应该分配 selectedpersonDelegate。而不是 FTC.delegate = self;你应该写FTC。 selectedpersonDelegate = self;
标签: uiviewcontroller delegates nsmutablearray uitableview protocols