Редактирование UITextField в UITableViewCell сбои

Нам нужно добавить возможности режима фона IOS. В моем случае CLLocationmanager работает в фоновом режиме, и я проверил ключ Location Updates, который добавлен в Info.plist.

24
задан Stephen Darlington 20 December 2008 в 18:34
поделиться

7 ответов

Я провел много времени на этом, но я наконец думаю, что у меня есть закрепленный.

прием - то, что таблица должна быть доступной для редактирования (т.е. editing, свойство должно быть установлено на YES). Хорошие новости - то, что Вы теперь в состоянии переместить точку вставки. Иногда лупа не появляется или следует, но Ваш жест всегда, кажется, работает.

это все еще квалифицирует как ошибка? Возможно. По крайней мере документация SDK Apple должна быть обновлена. Я повысил отчет об ошибках с Apple для покрытия этого (rdar://6462725).

12
ответ дан pkamb 29 November 2019 в 00:24
поделиться

Это действительно походит на ошибку ОС. Я попытался бы воспроизвести его путем выполнения образца UICatalog против 2.0, 2.1, и 2.2 SDKs, чтобы видеть, изменяется ли что-нибудь. (Существует ошибка, связанная с выравниванием текста ячейки таблицы, которое происходит, если Вы создаете для 2,2, но не, если Вы создаете для 2,1, независимо от того, какая версия ОС находится на устройстве.)

, Если это, оказывается, имеет значение, https://bugreport.apple.com /

0
ответ дан benzado 29 November 2019 в 00:24
поделиться

Я попробовал это своим приложением, и это, кажется, работает как ожидалось. Я получаю лупу каждый раз. Я использую 2,1 SDK.

0
ответ дан lostInTransit 29 November 2019 в 00:24
поделиться

В iOS 12 или более поздней версии вы можете выбрать ячейку табличного представления в раскадровке, а затем включить Взаимодействие с пользователем включено в инспекторе атрибутов.

0
ответ дан Saeed Ir 29 November 2019 в 00:24
поделиться

Благодаря этому сообщению я смог успешно заставить это работать правильно в моем приложении.

Что-то для добавления, однако:

Если Вы накроете на свой стол, чтобы быть доступными для редактирования, то Вы, вероятно, получите другое поведение, чем Вы ожидаете (расположение с отступом, редактирование виджетов, никаких индикаторов раскрытия, и т.д.). Это удивило меня, но здесь как к лучшему предложению с ним:

В Вашем делегате UITableView, реализации:

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

Затем в реализации Вашего UITableViewCell, устанавливает Ваш UITableView, чтобы быть доступным для редактирования ТОЛЬКО, когда Вы на самом деле редактируете:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    ((UITableView *)[self superview]).editing = YES;
...
}

и отключите редактирование, когда редактирование будет сделано:

- (void)textFieldDidEndEditing:(UITextField *)textField
{
...
    ((UITableView *)[self superview]).editing = YES;
}

Это гарантирует, что Ваша таблица не находится в режиме редактирования, когда Вы не редактируете ячейку, сохраняя вещи, работающие гладко.

Спасибо!

Brian M. Criscuolo Mark/Space Inc.

2
ответ дан 29 November 2019 в 00:24
поделиться

Ответ Брайана М. Крискуоло является наиболее близким, однако он все еще не совсем правильный - при использовании мной SDK2.2.1 я считаю, что должен сделать следующее:

Для вашего UITableViewDelegate (который часто является вашим UITableViewController) добавьте оба следующих элемента:

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

и:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return UITableViewCellEditingStyleNone;
}

и:

- (void)viewDidLoad {
[super viewDidLoad];

    // do any other customisation here
self.uiTableView.editing = true;
}

Если вы не поместите два верхних метода делегата, указанное выше приведет к появлению значков удаления рядом с каждой строкой , и отступ каждой строки.

Вам не нужно ничего делать с делегатами текстового поля, как указал Брайан (если у вас нет нескольких строк и вы не хотите реагировать на событие didSelectRowAtIndexPath:, которое вы, похоже, не получаете в режиме редактирования - тогда вам также нужно будет делать то, что он предлагает).

Кстати, похоже, это исправлено в SDK3.0 (хотя, думаю, может быть изменено)

2
ответ дан 29 November 2019 в 00:24
поделиться

на самом деле то, что работает лучше всего, кажется состоит в том, чтобы установить для свойства "редактирование" таблицы значение true в "viewDidLoad" и добавить их в делегат таблицы

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

, вам не нужно ничего делать в делегате текстового поля

0
ответ дан 29 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: