2

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

我的一些代码:

主视图.m:

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

表视图1.m:

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

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

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

主视图.m

- (void)viewDidLoad
{

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

工业和教育本身就是按钮。IndustryText 和 EducationText 是名称的占位符。

4

3 回答 3

2

在具有 2 个按钮的 MainView 中添加以下代码:

主视图控制器.h

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

主视图控制器.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];
 }

示例项目 Dropbox 链接

于 2013-05-20T20:06:40.560 回答
0

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

将委托回调更改为 MainView。

主视图.m:

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

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

表视图1.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 
于 2013-05-20T19:37:06.217 回答
0

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

表视图1.h

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

然后当你实例化你的 TableView1 类时,传递一个引用

主视图.m

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

最后在您的委托方法中使用您的父引用设置按钮的文本

表视图1.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];
}
于 2013-05-20T20:01:07.760 回答