我有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“拉”的代码。

10-06 15:03