从不同viewcontroller中的tableview单元格显示标题

时间:2013-05-20 19:12:33

标签: ios objective-c uitableview

我似乎无法想出这个非常简单的事情。我有一个带有2个按钮的UIViewController,每个按钮链接到不同的UITableViewController,当我点击UITableViewController中的一个单元格时,我希望单元格的输入显示在按下的按钮中。输入来自一个数组。

我的一些代码:

MainView.m:

- (void)tableViewController:(TableViewController1 *)tableViewController didSelectRow (NSInteger)rowIndex 
{
NSLog(@"Selected row number: %d",rowIndex);   
}

TableView1.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

[self.delegate tableViewController:self didSelectRow:indexPath.row];
[self.navigationController popViewControllerAnimated:YES];
}

我得到了用这样的方法定义的按钮的标题:

MainView.m

- (void)viewDidLoad
{

[self.industry setTitle:self.industryText forState:UIControlStateNormal];
[self.education setTitle:self.educationText forState:UIControlStateNormal];
[super viewDidLoad];
}

工业与工业教育是按钮本身。 IndustryText& EducationText是该名称的占位符。

3 个答案:

答案 0 :(得分:2)

在包含2个按钮的MainView中添加以下代码:

<强> MainViewController.h

- (void)selectedFirstButtonText:(NSString *)strText;

<强> MainViewController.m

在第一个按钮触摸事件中添加以下代码:

- (IBAction)btnFirstTouch:(id)sender {
    FirstTableViewController *firstVC = [[FirstTableViewController alloc] init];
    firstVC.delegate = self;
    [self presentViewController:firstVC animated:YES completion:nil];
}

现在实施委托方法:

- (void)selectedFirstButtonText:(NSString *)strText {
    [self.btnFirst setTitle:strText forState:UIControlStateNormal];
} 

<强> FirstTableViewController.h

#import <UIKit/UIKit.h>
#import "MainViewController.h"

@class MainViewController;

@interface FirstTableViewController : UITableViewController <UITableViewDataSource, UITableViewDataSource> 
@property(nonatomic, assign) MainViewController *delegate;


@end

现在在 FirstTableViewController.m

@synthesize delegate = _delegate;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];

    if([self.delegate respondsToSelector:@selector(selectedFirstButtonText:)]) {
        [self.delegate selectedFirstButtonText:cell.textLabel.text];
        NSLog(@"Selected Text");
    }

    [self dismissViewControllerAnimated:YES completion:nil];
 }

Sample Project Dropbox Link

答案 1 :(得分:0)

这会将按钮标题设置为单元格的文本:

将委托回调更改为MainView。

MainView.m:

- (void)tableViewController:(TableViewController1 *)tableViewController didSelectText (NSString *)text 
{
    NSLog(@"Selected text: %@", text); 
    [self.industry setTitle:text forState:UIControlStateNormal];  
}

并更改TableView1发送给其委托的数据。

TableView1.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *text = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
    [self.delegate tableViewController:self didSelectText:text];
    [self.navigationController popViewControllerAnimated:YES];
}

要使其正常工作(编译时没有警告),您需要更新定义的委托协议:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

并将其更改为:

- (void)tableViewController:(TableViewController1 *)tableViewController didSelectText (NSString *)text 

答案 2 :(得分:0)

将父类的引用传递给2个UITableViewControllers。因此,您的TableView1.h文件将具有MainView类型的属性。

<强> TableView1.h

@interface TableView1 : UITableViewController {
}
@property (nonatomic, strong) MainView *parent;

然后,当您实例化TableView1类时,传递引用

<强> MainView.m

TableView1 *tableView = [[UITableViewController alloc]init];
tableView.parent = self;

最后,在您的委托方法中,使用父引用

设置按钮的文本

<强> TableView1.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath    *)indexPath {

[self.delegate tableViewController:self didSelectRow:indexPath.row];
[self.parent.education setTitle:@"Title" forState:UIControlStateNormal];
[self.navigationController popViewControllerAnimated:YES];
}