我有2个ViewControllers,在第一个 - 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];
}
这是什么问题?
答案 0 :(得分:1)
有几件事......
您正在创建两个不同的TestControl
对象,为其中一个设置委托并推送另一个,因此处理按钮的人没有委托。
代理逻辑反过来会更好地工作。也就是说,TestControl
应该具有与其委托进行通信的代码,而不是代理从TestControl
“拉”。