iPhone Рэдагаванне Дзень беларускай салідарнасці выгляд табліцы

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

Да гэтага часу мая раскадроўкі выглядае наступным чынам:

NavigationController -> UIViewController (subclass with tableview property)

Я дадаў пункт навігацыі і кнопкі пункт Бар на сцэну выгляд кантролера, так што я бачу кнопку рэдагавання. Ён нічога не рабіў автомагіческі, таму я паспрабаваў звязваючы гэта селектар метаду setEditing ад Tableview дэлегаты. Гэта было перавесці яго ў рэжым рэдагавання. Аднак, кнопка рэдагавання не зменіцца на кнопку «Гатова», і таму няма ніякага спосабу, каб выйсці з рэжыму рэдагавання.

Ці павінен я стварыць яшчэ адзін элемент навігацыі для Done кнопкі? Як падключыць яго так, што ён з'яўляецца ў патрэбны час і працуе правільна?

9

7 адказы

Я думаю, што і з раскадровкой, адзіным спосабам (напэўна, самая просты) ажыццяўляць працоўную змяніць кнопку Гатова/, каб выкарыстоўваць наступны код:

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

Гэта рашэнне, якое сам Apple, рэалізуе, калі вы выбіраеце «Master-Detail» Application шаблон для вашага праекта.

Верагодна, раскадроўка яшчэ не дасканалы, і, спадзяюся, яна будзе ўдасканальвацца з Apple, у наступных выпусках ...

27
дададзена

Я толькі пачаў выкарыстоўваць раскадроўкі, таму я таксама хацеў скарыстаць раскадровку, каб дадаць сваю кнопку Edit. Гэта раздражняе, што знайшлі час, каб даведацца, як выкарыстоўваць новы інструмент, але знайсці вам патрэбен рулон клейкай стужкі, каб залатаць дзіркі.

Вы можаце прымусіць яго працаваць, але трэба дадаць кнопку Выбарачная. У інспектара Атрыбуты пераканайцеся, што ідэнтыфікатар з'яўляецца заказ і назва Edit.

Затым дадаць нешта падобнае ў вашым ым

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

Папытаеце Карыстацкая кнопка Edit выклікаць метад setEditMode.

толькі спадзявацца, што яны будуць фіксаваць рэалізацыю кнопку Edit ў рэдактары раскадроўкі ў будучыні.

13
дададзена
6 гадоў праз ... Ён да гэтага часу не было зафіксавана.
дададзена аўтар gone, крыніца

Абагульніць:

Кнопка, які вяртаецца UIViewController.editButtonItem адмысловая кнопка пераключэння з асаблівым паводзінамі, які выклікае - (Няслушны) setEditing: (BOOL) рэдагавання анімаванае: (BOOL) аніміраваны пры націску ,

Кнопка, які вяртаецца UINavigationController.editButtonItem гэта проста кнопка, проста пазначаюць «Edit».

Раскадроўкі дазваляе выбраць апошні адзін.

6
дададзена

Калі вы карыстаецеся навігацыю кантролер націснуць на кантролер прадстаўлення, проста ўсталюйце self.navigationItem.rightBarButtonItem = self.editButtonItem; , які змесціць кнопку па змаўчанні Edit ў правым. Калі панэль навігацыі не адлюстроўваецца, выклічце self.navigationController.navigationBarHidden = NO; . Тыя, будзе называцца ў viewDidLoad метад, ці нешта падобнае. Тады для таго, каб атрымаць Tableview, каб адказаць на выклік рэдагавання, выкарыстоўвайце наступны метад:

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

Гэта павінна рабіць тое, што вы хочаце, каб гэта зрабіць. Калі ў вас ёсць якія-небудзь пытанні, проста так бы мовіць, і мы можам звузіць дэталі

5
дададзена
Гэта павінна быць у значнай ступені тое ж самае. Я выкарыстоўваю раскадроўкі UI таксама (які я павінен сказаць, робіць жыццё нашмат прасцей) і павінны былі зрабіць падобныя рэчы, і гэта, як я пайшоў пра гэта. Я заўважыў, што часам вы павінны прайсці праз self.parentViewController.navigationItem.rightBarButtonItem = yourButton; час ад часу для таго, каб атрымаць жаданы выгляд у вашай іерархіі. Але астатнія павінны заставацца такой жа, як і раней, пакуль ваш Tableview звязаны з ViewController як IBOutlet
дададзена аўтар justin, крыніца
@SebastianWramba вы павінны быць у стане зрабіць што-то падобнае, калі шчыра. Проста назавіце яе Edit, а затым прысвоіць яму метад, які выклікае IBAction setEditing: аніміраваныя: . Асабіста я проста стварыць яго праграмна ў канкрэтным кантролера кшталту viewDidLoad метад, выкарыстоўваючы self.navigationItem.rightBarButtonItem = self.editButtonItem . Такім чынам, вы не павінны прызначыць метад ( setEditing ... ), так як гэта стандартны элемент кнопкі. Спадзяюся, што мае сэнс
дададзена аўтар justin, крыніца
Ці ёсць якія-небудзь навіны пра гэта? Спрабаваў высветліць, як замяніць адзін LOC з новай функцыяй раскадроўкі. Проста паставіўшы кнопку ў панэлі навігацыі і назваўшы яго «Edit» не працуе, вядома. ;)
дададзена аўтар Sebastian Wramba, крыніца
Праўда, я думаю, вынаходзячы кола (ці ў дадзеным выпадку паставіць кола дзесьці яшчэ) не вельмі разумны ход. Рэалізацыя кнопкі Edit-старому да гэтага часу, здаецца, лепшы спосаб, хоць ёсць раскадроўкі і перацякае ў цяперашні час.
дададзена аўтар Sebastian Wramba, крыніца
Так, я ведаю, як гэта зрабіць праграмна, але я спрабаваў выканаць гэта праз раскадровку UI.
дададзена аўтар 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
дададзена

можна выкарыстоўваць, не працуе кнопка нямога Edit з раскадроўкі рэдактара, а затым праграмна замяніць яго UIViewController.editButtonItem .

у viewDidLoad:

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

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

[self setToolbarItems:toolbarItems];    

гэты код мяркуе адзін дадаў кнопку нямы Рэдагаваць у крайнім левым элеменце на панэлі інструментаў у раскадроўкі.

1
дададзена
што Hacky пра гэта? дзякуй
дададзена аўтар kitschmaster, крыніца
права, але б да гэтага часу не згодны з тэрмінам ножовка :) Што такое «ўзламаць» у любым выпадку? для мяне гэты код далёкі ад узлому. хак будзе, калі гэты код будзе атрымаць несанкцыянаваны доступ да дадзеных у сістэме або кампутары, але гэта толькі рэгулярная кнопку Рэдагаваць шаблён з ...
дададзена аўтар kitschmaster, крыніца
Гэта крыху Hacky, але пераважна, каб паўторна якое рэалізуе кнопку рэдагавання.
дададзена аўтар SeanR, крыніца
Выкарыстанне кода для замены кнопкі вы дадалі ў Interface 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
дададзена