In my ios app, there are 3 separate text entry fields. One in a Searchbar and two in a UIAlertview(that has two entry fields). I need to give a drop down menu below the fields that can give the suggestions to the user. I have the data needed in an array(all 3 fields need the same array for suggestion). How would I do this? Should I programmatically create a UITableView that would appear below all the TextFields(with the most basic cell, containing one text field) ? If So, how can I get the right frame? Or else, what other method should I refer?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Here is a simple example. Here i am taking one UITextField. When it becomes first responder, i am showing the drop down i.e., UITableView . When an object selected from the table view the drop down will collapse.
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
mutArr=[[NSMutableArray alloc]init];
[mutArr addObject:@"object1"];
[mutArr addObject:@"object2"];
[mutArr addObject:@"object3"];
[mutArr addObject:@"object4"];
[mutArr addObject:@"object5"];
[mutArr addObject:@"object6"];
[mutArr addObject:@"object7"];
[mutArr addObject:@"object8"];
txtList1=[[UITextField alloc]init];
[txtList1 setFrame:CGRectMake(30, 100, 260, 30)];
[txtList1 setTag:100];
[txtList1 setDelegate:self];
[txtList1 setBackgroundColor:[UIColor brownColor]];
[txtList1 setTextColor:[UIColor whiteColor]];
[self.view addSubview:txtList1];
tblList=[[UITableView alloc]init];
[tblList setDelegate:self];
[tblList setDataSource:self];
[self.view addSubview:tblList];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return mutArr.count;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[[UITableViewCell alloc]init];
[cell setBackgroundColor:[UIColor grayColor]];
cell.textLabel.textColor=[UIColor whiteColor];
cell.textLabel.text=[mutArr objectAtIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[tblList cellForRowAtIndexPath:indexPath];
txtList1.text=cell.textLabel.text;
[txtList1 resignFirstResponder];
[self collapseTableView];
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField resignFirstResponder];
if (textField.tag==100)
{
CGRect rect=tblList.frame;
if (rect.size.height==0)
{
[self expandTableView];
}
}
}
-(void)collapseTableView
{
[tblList setFrame:CGRectMake(30, 130, 260, 120)];
[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionTransitionNone
animations:^{
[tblList setFrame:CGRectMake(30, 130, 260, 0)];
}
completion:^(BOOL finished)
{
NSLog(@"comleted");
}];
}
-(void)expandTableView
{
[tblList setFrame:CGRectMake(30, 130, 260, 0)];
[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionTransitionNone
animations:^{
[tblList setFrame:CGRectMake(30, 130, 260, 200)];
}
completion:^(BOOL finished)
{
NSLog(@"comleted");
}];
}