我有两个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控件?
答案 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
}
}