Доступ к конкретному UITableViewCell в другом UITableView в стеке навигации - PullRequest
1 голос
/ 06 апреля 2011

Я работаю над приложением с вкладками.Возможно, это тривиальный вопрос, но я просто хочу заменить значение метки UITableViewCell.Я получаю NSString из TextView, который встроен в «вход» UITableView.Ячейка, которую я хочу изменить, находится в родительском представлении «ввода».Изменение должно происходить в функции сохранения.
</p> <pre> - (void)save:(id)sender { //Get the needed string DescriptionViewCell *cell = (DescriptionViewCell *) [descriptionTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; NSString *temp = [[NSString alloc]initWithString:[cell.textView text]]; //Access parentview FindTableViewController *rootController = [self.navigationController.viewControllers objectAtIndex:1]; UITableViewCell *descriptionCell = [rootController.findUITable cellForRowAtIndexPath: [NSIndexPath indexPathForRow:0 inSection: 1]]; //replace label string descriptionCell.textLabel.text = temp; [temp release]; //return to parentview [self.navigationController popViewControllerAnimated:YES]; } </pre> <p>
К сожалению, описаниеcell не содержит никаких данных, и изменение не происходит.Вы видите какие-либо проблемы в моем коде, или я должен "поиграть" с индексами.
Заранее спасибо.
Приветствия,
Симон

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Что вы можете сделать, так это в вашем контроллере представления корневой таблицы добавить свойство NSString, которое будет использоваться для хранения значения обновленного текста. Затем в вашем методе save обновите значение этого свойства root view controlelrs NSString новым текстом. Наконец, вы вызываете свой корневой просмотр, контролирующий метод tableviews reloadData следующим образом:

FindTableViewController *rootController = [self.navigationController.viewControllers objectAtIndex:1];
[rootController.tableView reloadData];

В вашем представлении корневой таблицы вы хотите внедрить метод табличных представлений - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath, чтобы он применял значение свойства NSSTring к соответствующей ячейке при вызове reloadData.

if(indexPath.row == myCellIndex){
     cell.textLabel.text = myStringProperty; 
}
0 голосов
/ 06 апреля 2011

На самом деле я думаю, что вы ничего не получаете в описании. Ячейка, потому что эта ячейка не была видна в то время.cellForRowAtIndexPath возвращает nil, если ячейка не видна.Посмотрите документацию -

cellForRowAtIndexPath:

Returns the table cell at the specified index path.
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
Parameters

indexPath

    The index path locating the row in the receiver.

Return Value

    An object representing a cell of the table or nil if the cell is not visible or indexPath is out of range.

You can do this by managing text in some data structure and when you go back to previous view you call reloadData and check for that value in cellForRowAtIndexPath. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...