次要代表的问题

时间:2011-09-26 14:37:16

标签: iphone sdk delegates

我有两个UITableView,每个UITableView在同一个UIViewController中有不同的委托。

我正在尝试在另一个委托中调用控件,但它失败了。

简介:
mainViewController包含UITableView(带UITableViewDelegate和UITableViewDataSource)+ UIImageView。
secondaryTable包含UITableView(使用UITableViewDelegate和UITableViewDataSource)。

我想从secondaryTable调用UIImageView。

在.h

@interface secondaryTable : UIViewController <UITableViewDataSource,UITableViewDelegate>
@end


@interface mainViewController : UIViewController  <UITableViewDataSource,UITableViewDelegate> {

@property (nonatomic,retain) IBOutlet UIImageView *navbar;
@property (nonatomic,retain) IBOutlet UITableView *Table1;
@property (nonatomic,retain) IBOutlet UITableView *Table2;
@end

在.m

@implementation secondaryTable

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 2;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *MyIdentifier = @"MyIdentifier2";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];

        [cell.textLabel setFont:[UIFont boldSystemFontOfSize:12.0]];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.textLabel.textAlignment = UITextAlignmentCenter;
    }


    if (indexPath.row == 0) cell.textLabel.text =@"A";
    if (indexPath.row == 1) cell.textLabel.text =@"B";

    return cell;

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"Selected");

    mainViewController *myController = [[mainViewController alloc] init];

    [myController.navbar setHidden:NO];
}

@end


@implementation mainViewController

- (void)viewDidLoad {
Table1.delegate = self;
Table1.dataSource = self;

secondaryTable *myDelegate = [secondaryTable alloc];
Table2.delegate = myDelegate;
Table2.dataSource = myDelegate;
@end
}

在控制台日志中键入“已选择”,但不会显示控件。
为什么不能在mainViewController中调用navbar控件?

1 个答案:

答案 0 :(得分:1)

我建议通过让两个表指向同一个委托来完成此操作,但是在您的委托方法中,根据它所在的表选择行为。例如:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView == firstTable)
    {
        // Do appropriate things here
    }
    else if (tableView == secondTable)
    {
        // do things for table #2 here
    }
    else
    {
        assert(no);  // error checking
    }
}