我有2个ViewController,在第一个-TableView和第二个-带有标签的按钮上。当我单击第二个ViewController中的按钮时,我需要返回TableView并在其中设置
cell.detailTextLabel.text
按钮上标签上的文字。
这是我的代码,但是不起作用:
ViewController.h:
#import <UIKit/UIKit.h>
#import "TestControl.h"
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, myTestProtocol>
{
TestControl *myProtocol;
}
@property (strong, nonatomic) IBOutlet UITableView * tableTest;
@end
ViewController.m:
#import "ViewController.h"
#import "TestControl.h"
@implementation ViewController
@synthesize tableTest;
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBarHidden = YES;
myProtocol = [[TestControl alloc]init];
myProtocol.delegate = self;
// Do any additional setup after loading the view, typically from a nib.
}
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TestControl * test = [[TestControl alloc] initWithNibName:@"TestControl" bundle:nil];
[self.navigationController pushViewController:test animated:YES];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
switch (indexPath.row) {
case 0:
cell.textLabel.text = @"Firs Cell";
cell.detailTextLabel.text = myProtocol.myLabel.text;
break;
case 1:
cell.textLabel.text = @"Second Cell";
break;
case 2:
cell.textLabel.text = @"Third Cell";
break;
default:
break;
}
return cell;
}
@end
TestControl.h:
#import <UIKit/UIKit.h>
@protocol myTestProtocol <NSObject>
@end
@interface TestControl : UIViewController
{
UILabel *myLabel;
}
@property (nonatomic, assign) id <myTestProtocol> delegate;
@property (strong, nonatomic) IBOutlet UILabel *myLabel;
- (IBAction)testButton:(id)sender;
@end
TestControl.m:
@implementation TestControl
@synthesize myLabel;
@synthesize delegate;
- (IBAction)testButton:(id)sender
{
myLabel.text = @"TEXT LABEL";
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
}
这是什么问题呢???
最佳答案
几件事...
您正在创建两个不同的TestControl
对象,为其中一个对象设置委托,然后推另一个对象,因此处理按钮点击的对象没有委托。
反之,委托逻辑会更好地工作。也就是说,TestControl
应该具有与其委托人通信的代码,而不是委托人从TestControl
“拉”的代码。