iPhone Storyboard Jadval ko'rinishini o'zgartirish

Men Xcode-dagi yangi Storyboard xususiyatini o'rganishga harakat qildim va tahrir qilish rejimi uchun UITableView sozlamoqchi bo'lganimda muammoga duch keldim.

Hozirgi kunga kelib hikoyam shunga o'xshash:

NavigationController -> UIViewController (subclass with tableview property)

Navigatsiya elementini va Bar tugmasi elementini ko'rish nazoratchisi sahniga qo'shdim, shuning uchun men tahrirlash tugmachasini ko'rmoqchiman. U avtomatika bilan hech narsa qilmadi, shuning uchun men uni selektorni tableview vakilining setEditing uslubiga bog'lashni sinab ko'rdim. Buni tartibga solish rejimiga qo'ydi. Ammo, tahrirlash tugmasi "Bajarildi" tugmachasiga aylantirilmadi va shuning uchun tartibga solish rejimidan chiqishga hech qanday yo'l yo'q.

Bajar-i tugmasi uchun boshqa Navigatsiya elementini yaratishim kerakmi? Uni to'g'ri vaqtda paydo bo'ladigan va to'g'ri ishlaydigan qilib qanday ulashim kerak?

9

7 javoblar

tartibga solish/tugatish tugmasi ni amalga oshirish uchun yagona usul (ehtimol, eng oddiy) Storyboard bilan ham quyidagi kodni ishlatish kerak, deb o'ylayman:

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

Sizning loyihangiz uchun "Magistr batafsil-ilova" shablonini tanlasangiz, Apple o'zi bajaradigan yechim.

Ehtimol, Storyboard hali ham mukammal emas va umid qilamanki, u keyingi versiyalarda Apple'dan yaxshilanadi ...

27
qo'shib qo'ydi

Men Storyboards-dan foydalanishni boshladim, shuning uchun Edit-ni qo'shish uchun Storyboard-dan foydalanishni xohladim. Yangi vositadan qanday foydalanishni o'rganish uchun vaqt ajratganingizdan nafratlanasiz, lekin siz teshiklarni yamoqchi bo'lish uchun sizning kanalli lenta kerakligini topasiz.

Uni ishga olishingiz mumkin, lekin maxsus tugma qo'shishingiz kerak. Attributes inspektorida identifikatorning "Custom" va "sarlavha" deb o'zgartirilganligini tekshiring.

Keyin sizning .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];
    } 
}

Maxsus tartibga solish tugmachasini setEditMode usulini chaqiring.

Kelajakda Storyboard tahrirlovchisida Edit (Tartibga solish) tugmachasini amalga oshirishni tuzatishga umid qilishlari mumkin.

13
qo'shib qo'ydi
6 yildan so'ng ... Bu hali aniq emas.
qo'shib qo'ydi muallif gone, manba

Xulosa:

UIViewController.editButtonItem tomonidan qaytib kelgan - - (void) setEditing: (BOOL) animatsiyani tahrirlash (BOOL) animatsiya deb nomlangan maxsus xatti-harakatga ega maxsus tugma. .

UINavigationController.editButtonItem tomonidan qaytarilgan tugma oddiygina "Edit" bilan etiketlenmiş oddiy tugma.

Storyboard keyingi birini tanlashga imkon beradi.

6
qo'shib qo'ydi

Agar navigatsiya tekshirgichidan ko'rinishni tekshirgichga bosish uchun foydalanayotgan bo'lsangiz, o'ngdagi ko'rsatuv Tartibni tugmachasini qo'yadigan oddiygina self.navigationItem.rightBarButtonItem = self.editButtonItem; ni o'rnating. Ozbekcha paneli ko'rinmasa, self.navigationController.navigationBarHidden = NO ga qo'ng'iroq qiling. Buni viewDidLoad usulida yoki shunga o'xshash usulda chaqiradi. Keyin tableViewni tahrirlash chaqiruviga javob berish uchun quyidagi usuldan foydalaning:

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

Bu siz xohlagan narsani qilish kerak. Agar sizda biron bir muammolar mavjud bo'lsa, shunchaki ayting va tafsilotlarni qisqartirishimiz mumkin

5
qo'shib qo'ydi
Bu deyarli bir xil bo'lishi kerak. Men Storyboard UI-dan ham foydalanmoqdaman (buning ma'nosi hayotni ancha osonlashtiradi) va shunga o'xshash narsalarni qilish kerak edi, men bu haqda ketdim. Ba'zida o'zingizning xohlagan ko'rinishni olish uchun self.parentViewController.navigationItem.rightBarButtonItem = yourButton; orqali o'tishingiz kerakligini tushunib etdim. Ammo, qolgan narsalar sizning jadvalingizViewController bilan IBOutlet sifatida bog'langan ekan,
qo'shib qo'ydi muallif justin, manba
@SebastianWramba siz bunga o'xshash biror narsani qilishingiz kerak, halol. Buni faqat Edit deb atayman, keyin uni setEditing: animatsiya: deb chaqiradigan IBAction usuli tayinlang. Shaxsan, men faqatgina kodni viewDidLoad usulida self.navigationItem.rightBarButtonItem = self.editButtonItem dan foydalanib maxsus ko'rinishda tekshirgichda yarataman. Shunday qilib, standart tugma elementi bo'lganligi sababli, siz ( setEditing ... ) usulni tayinlashingiz shart emas. Umid qilamanki bu mantiqan
qo'shib qo'ydi muallif justin, manba
Bu haqda biror yangilik bormi? LOCni yangi Storyboard xususiyati bilan qanday qilib almashtirishni tushunishga harakat qilmoqdasiz. Yugurish satriga bir tugma qo'yib, "Tartibga solish" deb nom berish, albatta ishlamaydi. ;)
qo'shib qo'ydi muallif Sebastian Wramba, manba
To'g'ri, g'ildirakni qayta kashf etmoqchiman (yoki bu erda g'ildirakni boshqa joyga qo'yish kerak) juda aqlli harakat emas. Tahrirlash tugmasidan foydalangan holda eski uslublar hali ham eng yaxshi usul bo'lib ko'rinadi, biroq ular hozirgi zamon va segussiyalar mavjud.
qo'shib qo'ydi muallif Sebastian Wramba, manba
Ha, dasturni qanday amalga oshirishni bilaman, lekin men uni Storyboard UI orqali amalga oshirishga harakat qilyapman.
qo'shib qo'ydi muallif markplee, manba

@Graham javobiga qo'shish uchun uslubni o'zgartirishni xohlashingiz mumkin, shuning uchun siz "Bajarilgan" tugma uslubiga ega bo'lishingiz mumkin (ko'k rang). Shunga o'xshash narsa:

- (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
qo'shib qo'ydi

Storyboard tahrirlovchisidan ishlamaydigan, ishlamayotgan Edit tugmachasidan foydalaning va keyin dasturiy ravishda UIViewController.editButtonItem bilan o'zgartiring.

viewDidLoad:

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

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

[self setToolbarItems:toolbarItems];    

bu kodni soxtalashtiruvchi tugmachani Storyboard ichidagi asboblar panelidagi eng chap element sifatida qo'shgan deb hisoblaydi.

1
qo'shib qo'ydi
bu nima haqida hacky? rahmat
qo'shib qo'ydi muallif kitschmaster, manba
o'ng, lekin ikkovlon ham hack terminologiyasida ham rozi bo'lmaydilar :) baribir "hack" nima? Men uchun bu kod buzilmaydi. agar bu kod tizim yoki kompyuterdagi ma'lumotlarga ruxsatsiz kirishga ega bo'lsa, lekin bu faqat oddiy Tartibni tugmachasi hisoblanadi ...
qo'shib qo'ydi muallif kitschmaster, manba
Bu biroz hacky, ammo tahrirlash tugmachasini qayta ishlatish afzaldir.
qo'shib qo'ydi muallif SeanR, manba
Interface Builder dasturiga qo'shilgan tugmani almashtirish uchun kodni ishlatish tugmasi bilan haqiqatan ham hack kabi ko'rinishi kerak ... lekin bu bizni bu tarzda bajarishga majbur qiladigan Apple qismida kamchilik. Meni noto'g'ri qilmang, menimcha, bu Interface Builder-dagi haqiqiy Tahrir tugmachasini qo'llab-quvvatlaydigan eng yaxshi echim.
qo'shib qo'ydi muallif SeanR, manba

Agar sizda UIViewController bo'lsa va uning ichida UITableVew qo'shilgan. UITableView bilan ishlash uchun UIBarButton-ni tahrirlashni xohlasangiz, harakat qilib ko'ring:

Ushbu qatorni qo'shing ...

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    ...
}

va bu usul

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

qaerda

@property (weak, nonatomic) IBOutlet UITableView *myListTableView;
1
qo'shib qo'ydi