Я немного смущен и обеспокоен чем-то в вашем коде
manufactureSearchObjectString = @"empty"; //Is manufactureSearchObjectString a member variable?
[self.tableView reloadData]; //reloads the tabels so you can see the value.
[manufactureSearchObjectString release]; //Why do you release this here?? This will leak/throw a wobbly more than likely.
если factorySearchObjectString является переменной-членом для вашего класса, я предполагаю, что вы в какой-то момент разместили ее. Вы хотели бы выпустить это прежде, чем указывать это куда-нибудь еще. Таким образом, приведенный выше код становится
[manufactureSearchObjectString release];
manufactureSearchObjectString = [[NSString alloc] initWithString:@"empty"];
[self.tableView reloadData]; //reloads the tabels so you can see the value.
Если вы ранее не размещали его где-либо еще, то выпуск вообще не нужен.
Также вы можете захотеть использовать оператор switch или даже использовать "else if's" вместо простых операторов if как
if (indexPath.row == 0) //if row is 0 test is correct
{
}
if (indexPath.row == 1) //if row is 0 and passed the first test this still gets tested here
{
}
if (indexPath.row == 2) //same again row gets tested again when it's already passed the == 0 test
Измените это на
if (indexPath.row == 0) //if row is 0 test is correct
{
}
else if (indexPath.row == 1) //if row is 0 it's not so will not get tested again
{
}
else if (indexPath.row == 2)
{}
else //remember to finish with a plain else
Второй вариант будет работать быстрее, чем первый, в большинстве случаев, поскольку тест == будет выполняться только до достижения успеха. Время, которое потребуется, будет зависеть от количества строк и разделов, которые у вас есть в вашей таблице.
Однако, если вы хотите иметь более общий подход к этому, вы можете вызвать cellForRowAtIndexPath: и получить прямой доступ к строке там.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
CustomUITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
[cell setSecondCustomTextField:@"empty"]; //or could be cell.secondCustomTextField = @empty";
[tableView reloadData]; //may or may not need to call this now
}
}
Я предположил, что у вас есть установщик для того, что вы называете редактируемым текстовым полем в пользовательской ячейке табличного представления. Если нет .. вы должны сделать один.
EDIT:
Хорошо, вы звоните
[[NSBundle mainBundle] loadNibNamed:@"VehicleSearchCellDual" owner:self options:nil];
но не ссылаясь ни на что, вам не нужно этого делать. Я так понимаю, вы пытаетесь загрузить свой пользовательский UITableViewCell из его NIB, но вы поступаете неправильно. Я предлагаю вам прочитать этот пост Coco with Love относительно ячеек представления пользовательских таблиц.
Я чувствую, что для добавления двух текстовых полей в UITableViewCell пользовательский NIB немного излишним, однако, поскольку вы решили сделать это таким образом, я отвечу на ваш вопрос таким образом.
Для начала, нет особого смысла иметь три пользовательских ячейки, когда каждая из них так похожа. Вы можете просто создать один пользовательский файл пера UITableViewCell (это также облегчит чтение вашего кода), поэтому мы будем использовать ваш файл пера для «VehicleSearchCellDual», так как он имеет большинство функций, которые нам нужны, игнорируя другие два «VehicleSearchCell» и «VehicleSearchButtonCell», так как они вам не понадобятся. Теперь скопируйте UIButton из «VehicleSearchButtonCell» и вставьте его в «VehicleSearchCellDual» и установите для него значение «скрытый» в конструкторе интерфейса, давайте также дадим ему значение тега 4. Если вы установили теги в конструкторе интерфейса для соответствия значения, которые вы вызываете ниже, затем вызываете viewWithTag: должны возвращать то, что вы ищете, теперь, когда мы будем использовать ваш «VehicleSearchCellDual», я буду предполагать, что тег 1 соответствует крайнему левому текстовому полю, тег 2 является центральным текстовым полем, а тег 3 является самым правым текстовым полем.
Хорошо, теперь вы сделали, что можете загружать ячейки таблицы следующим образом.
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"VehicleSearchCellDual" owner:self options:nil];
for( NSObject* nibItem in nib )
{
if( [nibItem isKindOfClass:[UITableViewCell class]] )
{
cell = (UITableViewCell*)nibItem;
break;
}
}
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if(indexPath.section == 0)
{
UILabel* titleLabel;
titleLabel = (UILabel *)[cell viewWithTag:1];
UILabel* rightMostLabel;
rightMostLabel = (UILabel *)[cell viewWithTag:3];
if(indexPath.row == 0)
{
[titleLabel setText:@"Manufacture"];
[rightMostLabel setText:manufactureSearchObjectString];
}
else if(indexPath.row == 1)
{
[titleLabel setText:@"Model"];
[rightMostLabel setText:@"empty"];
UILabel* leftMostLabel;
leftMostLabel = (UILabel *)[cell viewWithTag:2];
leftMostLabel.text = @"empty";
}
else if(indexPath.row == 2)
{
[titleLabel setText:@"Year"];
[rightMostLabel setText:@"empty"];
}
else if(indexPath.row == 3)
{
[titleLabel setText:@"Key type"];
[rightMostLabel setText:keyTypeSearchObjectString];
}
}
else if(indexPath.section == 1)
{
if(indexPath.row == 0)
{
[[cell viewWithTag:1] setHidden:YES];
[[cell viewWithTag:2] setHidden:YES];
[[cell viewWithTag:3] setHidden:YES];
[[cell viewWithTag:4] setHidden:NO];
}
}
return cell;
Теперь выше, где вы устанавливаете rightMostLabel и leftMostLabel в значение @ "empty", вы можете захотеть установить для них любую переменную-член 'searchString', подходящую для этого поля. В противном случае каждый раз, когда таблица перезагружается, значения этих полей устанавливаются как «пустые».
Это должно поставить вас на правильный путь.