我似乎无法想出这个非常简单的事情。我有一个带有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是该名称的占位符。
答案 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];
}
答案 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];
}