Історія iPhone Редагування перегляду таблиці

Я намагався вивчити нову функцію розфарбовування в Xcode, і я зіткнувся з проблемою, намагаючись встановити режим редагування UITableView.

Поки що моя розкадровка виглядає так:

NavigationController -> UIViewController (subclass with tableview property)

Я додав елемент навігації та елемент панелі керування для перегляду контролера перегляду, тому я бачу кнопку редагування. Вона нічого не робила автоматично, тому я спробував пов'язати його з селектором із методом setEditing delegate tableview. Це поставило його в режим редагування. Однак кнопка редагування не змінилася на кнопку "Готово", і тому неможливо вийти з режиму редагування.

Чи потрібно створити інший елемент навігації для кнопки Готово? Як підключити його, щоб він з'явився в потрібний час і працює правильно?

9

7 Відповіді

Я думаю, що також, використовуючи Storyboard, єдиним способом (найімовірніше, найпростішим) буде реалізована робоча кнопка edit/done , використовується наступний код:

- (void)viewDidLoad
{
[super viewDidLoad];
...
//set the edit button
self.navigationItem.leftBarButtonItem = self.editButtonItem;
...

Це рішення, яке реалізує сам Apple, якщо ви виберете шаблон "Master-Detail Application" для вашого проекту.

Можливо, Storyboard ще не ідеальний, і сподіваюся, що це буде покращено від Apple в наступних випусках ...

27
додано

Я тільки почав використовувати Storyboards, тому я також хотів використовувати Storyboard, щоб додати мою кнопку "Редагувати". Це дратує, що потрібно витратити час, щоб навчитися користуватися новим інструментом, але вам потрібен рулон стрічки для кріплення до отворів.

Ви можете отримати його на роботу, але потрібно додати спеціальну кнопку. В Інспекторі атрибутів переконайтеся, що ідентифікатор є користувальницьким, а заголовок - Редагувати.

Потім додайте щось на зразок цього у вашому .m

- (IBAction)setEditMode:(UIBarButtonItem *)sender {
    if (self.editing) {
        sender.title = @"Edit";
        [super setEditing:NO animated:YES];
    } else {
        sender.title = @"Done";
        [super setEditing:YES animated:YES];
    } 
}

Натискайте кнопку Custom Edit за допомогою методу setEditMode.

Можна лише сподіватися, що в майбутньому вони будуть виправляти реалізацію кнопки «Редагувати» в редакторі розкадровки.

13
додано
6 років по тому ... Це все ще не виправлено.
додано Автор gone, джерело

Узагальнити:

Кнопка, яку повернув UIViewController.editButtonItem - це спеціальна кнопка перемикання з особливим поведінкою, яка називає - (void) setEditing: (BOOL) редагування анімованого: (BOOL) анімованого .

Кнопка, яку повернув UINavigationController.editButtonItem , є простим кнопочкою, позначеною просто "Редагувати".

Сюжет дозволяє вибирати останню.

6
додано

Якщо ви використовуєте контролер навігації для натискання на контролер перегляду, просто встановіть self.navigationItem.rightBarButtonItem = self.editButtonItem; , що поставить правильну кнопку "Редагувати" за замовчуванням. Якщо панель навігації не відображається, зателефонуйте self.navigationController.navigationBarHidden = NO; . Вони будуть викликані в методі viewDidLoad або щось подібне. Потім, щоб отримати табличну версію, щоб відповісти на виклик редагування, скористайтеся наступним методом:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [tableView setEditing:editing animated:animated];
}

Це має робити те, що ви хочете зробити. Якщо у вас виникли проблеми, просто скажіть так, і ми можемо звузити деталі

5
додано
Це має бути майже таким же. Я також використовував Storyboard UI (що я повинен сказати робить життя набагато простіше), і повинні були робити подібні речі, і це, як я пішов про це. Я помітив, що іноді вам доводиться періодично переходити через self.parentViewController.navigationItem.rightBarButtonItem = yourButton; , щоб отримати бажаний вигляд у вашій ієрархії. Але решта повинна залишатися такою ж, як раніше, доки ваш tableView буде пов'язано з viewController як IBOutlet
додано Автор justin, джерело
@ СебастіанВрамба ви повинні мати можливість чесно робити щось подібне. Просто називайте це Редагування, а потім призначте його методом IBAction, який викликає setEditing: animated: . Особисто я просто створюю його програмним шляхом за допомогою методу viewDidLoad з контролером певного вигляду, використовуючи self.navigationItem.rightBarButtonItem = self.editButtonItem . Таким чином, вам не потрібно призначати метод ( setEditing ... ), оскільки це стандартний елемент кнопки. Сподіваюся, це має сенс
додано Автор justin, джерело
Чи є які-небудь новини про це? Намагалися з'ясувати, як замінити один LOC на нову функцію розкадровки. Просто клацнути на навігаційній панелі і назвати його "Редагувати", звичайно, не працює. ;)
додано Автор Sebastian Wramba, джерело
Правда, я вважаю, що винахід колеса (або в цьому випадку поставте колесо де-небудь ще) не дуже розумний крок. Реалізація кнопки «Редагувати» старовинним способом, як видається, є найкращим способом, хоча зараз існують розкадровки та рекламні ролики.
додано Автор Sebastian Wramba, джерело
Так, я знаю, як це зробити програмним шляхом, але я намагався виконати це за допомогою інтерфейсу Storyboard.
додано Автор markplee, джерело

Щоб додати до відповіді @Graham, ви також можете змінити стиль, щоб мати стиль кнопки «Готово» (синій колір). Щось на зразок цього:

- (IBAction)setEditMode:(UIBarButtonItem *)sender {
    if (self.editing) {
        sender.title = @"Edit";
        sender.style = UIBarButtonItemStylePlain;
        [super setEditing:NO animated:YES];
    } else {
        sender.title = @"Done";
        sender.style = UIBarButtonItemStyleDone;
        [super setEditing:YES animated:YES];
    } 
}
2
додано

можна скористатися дурною, непрацюючою кнопкою "Редагувати" у редакторі "Розкадровка", а потім програмно замініть його на UIViewController.editButtonItem .

в viewDidLoad:

 NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];

[toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem];

[self setToolbarItems:toolbarItems];    

цей код передбачає, що одна з них додала туманну кнопку "Редагування" як найменший елемент на панелі інструментів на "Історії".

1
додано
що це здогадка? Дякую
додано Автор kitschmaster, джерело
правильно, але я все одно не погоджуюсь з терміном злому :), що в будь-якому випадку "рубатиме"? для мене цей код далеко не зламати. хак буде, якщо цей код отримає несанкціонований доступ до даних в системі або на комп'ютері, але це просто регулярна кнопка «Редагування» ...
додано Автор kitschmaster, джерело
Це трохи незграбний, але краще повторювати кнопку редагування.
додано Автор SeanR, джерело
Використовуючи код, щоб замінити кнопку, яку ви додали в інтерфейс Builder за допомогою кнопки, це насправді повинно виглядати як трохи зламати ... але це недолік на частині Apple, що змушує нас робити це таким чином. Не зрозумійте мене неправильно, я думаю, що це найкращий варіант, відмінний від Apple, що підтримує фактичну кнопку «Редагування» в Interface Builder.
додано Автор SeanR, джерело

У випадку, якщо у вас є UIViewController, і всередині цього ви додали UITableVIew. Якщо ви хочете додати редагувати UIBarButton для взаємодії з UITableView, спробуйте:

Додати цей рядок ...

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    ...
}

і цей спосіб

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

    [super setEditing:editing animated:animated];
    [self.myListTableView setEditing:editing animated:animated];

    if(self.myListTableView.editing) {
        NSLog(@"editMode on");
    } else {
        NSLog(@"editMode off");
    }
}

де

@property (weak, nonatomic) IBOutlet UITableView *myListTableView;
1
додано
IT KPI iOS
IT KPI iOS
74 учасників

Чат обсуждения IOS. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/602

ios_jobs_ua
ios_jobs_ua
27 учасників

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.