我使用 UITextField 和 UITableView 创建了一个下拉列表。当用户选择文本字段时,表格视图将显示为下拉列表。我已经在另一个类中设置了 tableview 委托和数据源。
现在我的问题是我想将 tableview 中选定行的文本放到文本字段上,即当用户在 tableview 中选择一行时,我想将 tableview 行文本发送回视图控制器(由文本字段组成)。
提前致谢。
我使用 UITextField 和 UITableView 创建了一个下拉列表。当用户选择文本字段时,表格视图将显示为下拉列表。我已经在另一个类中设置了 tableview 委托和数据源。
现在我的问题是我想将 tableview 中选定行的文本放到文本字段上,即当用户在 tableview 中选择一行时,我想将 tableview 行文本发送回视图控制器(由文本字段组成)。
提前致谢。
使用 UITableView 为控制器创建自定义委托
项目列表 .h 文件
@protocol ItemsListDelegate : NSObject
@optional
- (void)itemSelected:(int)num withTitle:(NSString *)title;
@end
@interface ItemsList : UITableViewController{
id <ItemsListDelegate> delegate;
...
}
项目列表 .m 文件
#import "ItemsList.h"
@implementation ItemsList<UITableViewDataSource, UITableViewDelegate>
@synthesize delegate;
.....
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[delegate itemsSelected:[indexPath row] withTitle:[items objectAtIndex:[indexPath row]]];
}
.....
在 ViewController 中,您的字段设置在 .h
#import "ItemsList.h"
@interface ViewWithField<ItemsListDelegate>{
ItemsList *itemsList;
}
....
在 .m 文件中
.....
- (void)viewDidLoad
{
itemList.delegate = self;
}
- (void)itemSelected:(int)num withTitle:(NSString *)title{
self.textField.text = title;
}
.....
像这样的东西。我不检查此代码中的错误。但是这样看。或者使用NotificationCenter,不过这种方式更正确。
对不起我丑陋的英语。
在视图中添加以下代码确实加载了您添加 UITextField 的类
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addValueToTextField:) name:@"addValueToTextFiel" object:nil];
-(void)addValueToTextField:(NSNotification *) notification{
NSString* text = [notification text];
yourTextField.text = text;
}
在其他类的 UITable 视图的 Didselect 委托中,您必须添加以下代码
UITableViewCell *selectedCell =[tableView cellForRowAtIndexPath:indexPath];
[[NSNotificationCenter defaultCenter] postNotificationName:@"addValueToTextField" object:nil userInfo:selectedCell.Text];
或者替代它是您可以使用自定义委托