iPhone Storyboard Bir tablo görünümünü düzenleme

Xcode'daki yeni Storyboard özelliğini öğrenmeye çalışıyorum ve düzenleme modu için UITableView ayarlamaya çalışırken bir sorunla karşılaştım.

Şimdiye kadar benim storyboard şöyle görünüyor:

NavigationController -> UIViewController (subclass with tableview property)

Görüntüleme denetleyicisi sahnesine bir Gezinme Öğesi ve bir Bar Düğmesi öğesi ekledim, bu yüzden bir düzenleme düğmesi görüyorum. Otomatik olarak herhangi bir şey yapmadı, bu yüzden seçiciyi tableview temsilcisinin setEditing yöntemine bağlamayı denedim. Bu düzenleme moduna geçirdi. Bununla birlikte, düzenleme düğmesi "Bitti" düğmesine dönüşmedi ve düzenleme modundan çıkmanın bir yolu yok.

Bitti düğmesi için başka bir Navigasyon öğesi mi oluşturmalıyım? Doğru zamanda görünecek ve düzgün çalışacak şekilde nasıl bağlarım?

9

7 cevap

Ayrıca, Storyboard ile birlikte, çalışan bir düzenleme/tamamlama düğmesini uygulamak için tek yol (en kolayı olanı), aşağıdaki kodu kullanmaktır:

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

Bu, projeniz için bir "Ana Detay Uygulaması" şablonu seçerseniz, Apple'ın uyguladığı çözümdür.

Muhtemelen Storyboard hala mükemmel değildir ve umarım bir sonraki sürümde Apple'dan geliştirilecektir.

27
katma

Storyboard'ları kullanmaya yeni başladık, bu yüzden Edit butonumu eklemek için Storyboard'u da kullanmak istedim. Yeni bir aracın nasıl kullanıldığını öğrenmek için zaman ayırmak can sıkıcıdır, ancak deliklerin üstünü örtmek için bir koli bandı rulosuna ihtiyacınız olduğunu buluyoruz.

Bunu işe alabilirsiniz, ancak bir Özel düğme eklemeniz gerekir. Nitelikler denetçisinde Tanımlayıcı'nın Özel olduğundan ve başlık Düzen'in olduğundan emin olun.

Sonra buna benzer bir şey ekleyin.

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

Özel Düzenle düğmeniz setEditMode yöntemini çağırır.

Gelecekte Storyboard düzenleyicisindeki Edit düğmesinin uygulanmasını yalnızca düzelteceklerini umuyoruz.

13
katma
6 yıl sonra ... Hala tamir edilmedi.
katma yazar gone, kaynak

Özetlemek:

UIViewController.editButtonItem tarafından döndürülen Düğme, - (void) setEditing: (BOOL) animasyonu canlandırılan özel davranışı olan özel bir geçiş düğmesidir: (BOOL) animasyonlu basılırsa .

UINavigationController.editButtonItem tarafından döndürülen Button, sadece "Düzenle" ile etiketlenmiş basit bir Düğmedir.

Storyboard ikincisini seçmeye izin verir.

6
katma

Seyir kontrol cihazını kontrol ünitesine basmak için kullanıyorsanız, self.navigationItem.rightBarButtonItem = self.editButtonItem; 'i ayarlayınız. Gezinme çubuğu görünmüyorsa, self.navigationController.navigationBarHidden = NO; numaralı telefonu arayın. Bunlar viewDidLoad yönteminde veya benzer bir şekilde çağrılabilir. Sonra tabloyu düzenleme çağrısına yanıt vermek için, aşağıdaki yöntemi kullanın:

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

Yapmasını istediğin şeyi yapmalı. Herhangi bir sorun varsa, sadece söyle ve ayrıntıları daraltabiliriz.

5
katma
Hemen hemen aynı olmalı. Ben de Storyboard kullanıcı arayüzünü kullanıyorum (ki bunu söylemeliyim ki hayatı çok daha kolay hale getiriyor) ve benzer şeyler yapmak zorunda kaldım ve bu konuya gittim. Bazen, heirarchy'de istediğiniz görünümü elde etmek için self.parentViewController.navigationItem.rightBarButtonItem = yourButton; 'dan geçmeniz gerektiğini fark ettim. Ama masaüstünüz ViewController'a bir IBOutlet olarak bağlı olduğu sürece, geri kalanı da aynı kalmalıdır.
katma yazar justin, kaynak
@SebastianWramba dürüstçe böyle bir şey yapabilmeniz gerekir. Sadece Düzenle'yi seçin, ardından setEditing: animated: olarak adlandırılan bir IBAction yöntemi atayın. Şahsen, ben sadece self.navigationItem.rightBarButtonItem = self.editButtonItem kullanarak, belirli bir görüntü denetleyicinin viewDidLoad yönteminde program aracılığıyla oluşturuyorum. Bu şekilde standart bir düğme öğesi olduğundan bir yöntem ( setEditing ... ) atamanıza gerek yoktur. Umarım bu mantıklıdır
katma yazar justin, kaynak
Bu konuda bir haber var mı? Yeni Storyboard özelliğiyle bir LOC'yi nasıl değiştireceğimizi anlamaya çalışıyorum. Gezinme çubuğuna bir düğme koymak ve "Düzenle" ismini vermek elbette işe yaramıyor. ;)
katma yazar Sebastian Wramba, kaynak
Doğru, sanırım tekerleği yeniden icat etmek (ya da bu durumda tekerleği başka bir yere koymak) çok akıllıca bir hareket değildir. Edit butonunun uygulanması eski moda yolun, şu andaki storyboard'lar ve cürümler olmasına rağmen hala en iyi yol olduğu görünmektedir.
katma yazar Sebastian Wramba, kaynak
Evet, programlı olarak nasıl yapılacağını biliyorum, ancak bunu Storyboard UI aracılığıyla gerçekleştirmeye çalışıyorum.
katma yazar markplee, kaynak

@Graham yanıtına eklemek için, stili değiştirmek isteyebilirsiniz, böylece "Bitti" düğme stiline sahip olabilirsiniz (mavi renk). Böyle bir şey:

- (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
katma

Biri dumb'i kullanabilir, Storyboard düzenleyicisinden Edit (Düzenleme) butonunu kullanamaz ve programatik olarak UIViewController.editButtonItem ile değiştirebilir.

viewDidLoad içinde:

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

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

[self setToolbarItems:toolbarItems];    

Bu kod, Storyboard'daki araç çubuğundaki en soldaki öğe olarak dilsiz Düzenleme düğmesini eklediğini varsayar.

1
katma
bu konuda ne şansı var? Teşekkürler
katma yazar kitschmaster, kaynak
haklı, ama ii hala hack terimi üzerinde hemfikir değil :) neyse bir "hack" nedir? Benim için bu kod hackten uzak. hack olurdu, eğer bu kod bir sistem veya bilgisayardaki verilere yetkisiz erişim elde ederse, ancak bu sadece düzenli Düzenleme düğmesidir.
katma yazar kitschmaster, kaynak
Bu biraz hacky ama düzenleme düğmesini yeniden uygulamak tercih edilir.
katma yazar SeanR, kaynak
Düğmeyle Arayüz Oluşturucu'ya eklediğiniz düğmeyi değiştirmek için kod kullanmak gerçekten bir kesmek gibi görünmelidir ... ama Apple'ın bu şekilde yapmamıza zorlayan bir eksikliktir. Yanlış anlamayın, sanırım bu, Arayüz Oluşturucu'daki gerçek Düzenleme düğmesini destekleyen Apple'ın en kısa çözümü.
katma yazar SeanR, kaynak

UIViewController'a sahip olmanız ve bunun içinde bir UITableVIew eklediniz. UITableView ile etkileşimde bulunmak için UIBarButton'u düzenlemek isterseniz, şunu deneyin:

Bu satırı ekle ...

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    ...
}

ve bu yöntem

- (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");
    }
}

nerede

@property (weak, nonatomic) IBOutlet UITableView *myListTableView;
1
katma