iOS中的代表团

时间:2012-08-10 23:11:44

标签: iphone objective-c ios delegates

我有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];

}

这是什么问题?

1 个答案:

答案 0 :(得分:1)

有几件事......

您正在创建两个不同的TestControl对象,为其中一个设置委托并推送另一个,因此处理按钮的人没有委托。

代理逻辑反过来会更好地工作。也就是说,TestControl应该具有与其委托进行通信的代码,而不是代理从TestControl“拉”。