将值从表视图传递到IOS中的文本字段

时间:2017-12-08 10:30:05

标签: ios objective-c uitableview

我的视图控制器中有一个文本字段,当用户键入汽车名称时,它会在表格视图中显示相关的汽车名称列表,用户可以从表格视图中选择任何汽车。如果汽车名称之间有空格,例如:" Honda Civic"空间被%20取代而成为" Honda%20Civic"并且它将值从文本字段传递给API。现在我遇到一个问题,当我输入任何字母时,如果我选择任何一辆汽车它显示本田汽车的列表它是文本字段,当我发送文本字段值时它转到了ho而不是我从表视图中选择的名称。如何将我从tableview列表中选择的汽车名称发送给API? 我用%20替换空格的代码就是这个,

<items>
    <item>Lorem ipsum dolor sit amet, sed diam nonumy tempor<o foo="bar"> # # #. # # #.</o></item>
    <item>Lorem ipsum dolor sit amet, sed diam nonumy<br/>tempor<o foo="bar"> # # #. # # #.</o></item>
    <item>Lorem ipsum dolor sit amet, sed diam nonumy <b>tempor<o foo="bar"> # # #</o></b><o foo="bar">. # # #.</o></item>
    <item>Lorem ipsum dolor sit amet, sed diam nonumy <b>tempor<o foo="bar"> </o><i foo="bar"><o foo="bar">#</o></i><o foo="bar"> # #</o></b><o foo="bar">. # # #.</o></item>
    <item>Lorem ipsum dolor sit amet.</item>
</items>

这是表格视图方法,

-(void)textFieldDidChanges :(UITextField *)theTextField{
result=theTextField.text;
NSLog(@"XXX%@",result);
result=[result stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
NSLog(@"VVV %@",result);
//just use this result where you want
}

这是我存储在NSUserdefault并传递到下一个视图

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView==_year01) {
    return [year1Array count];
}else{
    return [carArray count];
}
return YES;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}


if (tableView == _year01){
    cell.textLabel.text=[year1Array objectAtIndex:indexPath.row];
}else{
    cell.textLabel.text=[carArray objectAtIndex:indexPath.row];
}

cell.backgroundColor=[UIColor darkGrayColor];
cell.textLabel.textColor=[UIColor whiteColor];


return cell;

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

UITableViewCell *selectedCell=[tableView cellForRowAtIndexPath:indexPath];
NSLog(@"Cell %@",selectedCell);

if (tableView == _year01){
    self.year1.text=@"";
    self.year1.text=[year1Array objectAtIndex:indexPath.row];
    self.year01.hidden=YES;
}else{
    self.carName.text=@"";
    self.carName.text=[carArray objectAtIndex:indexPath.row];
    _carTable.hidden=YES;
    [_carName resignFirstResponder];
}
}

结果中的值来自我写的字母,而不是从表格视图列表中选择的值。

2 个答案:

答案 0 :(得分:0)

我不知道你使用NSUserDeafults的哪个地方。商店文本字段结束了整理         [[NSUserDefaults standardUserDefaults] setObject:textfield.text forKey:@"name"];

答案 1 :(得分:0)

在我看来,在用户默认设置中保存某些内容只是为了在同一个控制器上读取它是不必要的。如果你使用segue,为什么你不使用依赖注入?如果您不是,那么在该类中创建一个包含您要发送的值的全局对象就足够了。在作为轻量级信息终止后,用户默认值更多地用于获取一些信息。

示例:

@property (nonatomic, string) NSString *carYear;

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

UITableViewCell *selectedCell=[tableView cellForRowAtIndexPath:indexPath];
NSLog(@"Cell %@",selectedCell);

if (tableView == _year01){
    self.year1.text=@"";
    self.year1.text=[year1Array objectAtIndex:indexPath.row];
    self.carYear = [carArray objectAtIndex:indexPath.row];
    self.year01.hidden=YES;
}else{
    self.carName.text=@"";
    self.carName.text=[carArray objectAtIndex:indexPath.row]; //This will have stored name
    _carTable.hidden=YES;
    [_carName resignFirstResponder];
}
}

在此之后,如果您正在使用将该值传递为:

[self performSegueWithIdentifier:@"identifier" sender:self.carYear];

OR:

YourVCToPassValue *vc = [YourVCTOPassValue new];
vc.valueToBePassed = self.carYear;