SORU
6 Mart 2011, Pazar


Görünüm arasında geçen Veri Denetleyicileri

İOS ve Objective-C ve tüm MVC paradigma yeniyim ve aşağıdaki saplanıp kaldım.

Veri giriş formu gibi davranan bir görünümü var ve kullanıcı birden fazla ürün seçmek için Seçenek vermek istiyorum. Ürünler tableview bir denetleyicisi ile başka bir görünüme listelenir ve çoklu seçim sağlamıştır.

Benim soru, nasıl bir görünüm verileri aktarabilirim? Ben çok özledim seçimleri üzerinde tableview bir dizi, ama nasıl o zaman geçmesi için geri önceki veri giriş formu görünümü çok olabilir kaydedilmiş ile birlikte veri için temel veri gönderme şeklinde mi?

Sörf etrafında ve bazı insanlar app temsilci bir dizi ilan gördüm. Tek bir şey duymuştum ama bu Bilgi bir model oluşturma hakkında bir şeyler okudum ne anlamıyorum.

Bu sahne doğru yolu ne olurdu ve nasıl bu konuda gitmek istiyorsunuz?

CEVAP
16 Mart 2012, Cuma


Bu soruya daha iyi bir cevap insanlar benim gibi iOS dünyasında başlayan yardım ver dedim çok popüler burada stackoverflow gibi görünüyor.

Bu cevap insanları anlamak için yeterince açık ve hiçbir şey kaçırmadım umarım.

Geçen Veri İlet

Geçen başka bir veri görünümü denetleyicisi görünümü denetleyicisi için ileri. Eğer bir gezinti yığını için bastırıyor olabilir başka bir görünüm denetleyicisi bir görünüm denetleyicisi nesnesi/bir değer vermek istediğinizde bu yöntemi kullanabilirsiniz.

Bu örnek için ViewControllerA ViewControllerB olacak

ViewControllerB ViewControllerA BOOL bir değer geçirmek için aşağıdakileri yapın.

  1. ViewControllerB.h BOOL için bir özellik oluşturun

    @property(nonatomic) BOOL *isSomethingEnabled;
    
  2. ViewControllerA ViewControllerB bu yüzden kullanımı hakkında söylemek gerekir

    #import "ViewControllerB.h"
    

    Nereye görünüm eg yüklemek istiyorum. didSelectRowAtIndex veya nav üzerine basmak önce ViewControllerB özelliği ayarlamanız gerekir IBAction bazı yığını.

    ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
    viewControllerB.isSomethingEnabled = YES;
    [self pushViewController:viewControllerB animated:YES];
    

    Bu BOOL değer YES 30 isSomethingEnabled koyacaktır.

Geçen Veri İleriye Geçiş kullanarak

Eğer Çizimlerini kullanıyorsanız geçişlerini kullanarak çok büyük olduğunu ve verileri öne geçmek için bu işlem gerekir. Bu yukarıdaki benzer ama görünüm denetleyicisi basmak önce verileri geçirmeden yerine, adında bir yöntem kullanırsınız

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

ViewControllerA BOOL 36 ** geçmek için şunları yapın:

  1. ViewControllerB.h oluşturmak BOOL bir özellik

    @property(nonatomic) BOOL *isSomethingEnabled;
    
  2. ViewControllerA ViewControllerB çok kullanımı hakkında söylemek gerekir

    #import "ViewControllerB.h"
    
  3. Film şeridinde ViewControllerB 43 *segue bir oluşturmak ve bir tanımlayıcı ver, bu örnekte "showDetailSegue" arayacağız

  4. Herhangi bir zaman, bu nedenle yapıldığında denir ViewControllerA yöntemi eklemeliyiz sonraki geçiş olarak adlandırılan tespit etmeliyiz ve bir şeyler yapın. Bizim örneğimizde "showDetailSegue" kontrol edeceğiz ve eğer thats işlemi ViewControllerB 48 *bizim değer geçeceğiz

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        if([segue.identifier isEqualToString:@"showDetailSegue"]){
            ViewControllerB *controller = (ViewControllerB *)segue.destinationViewController;
            controller.isSomethingEnabled = YES;
        }
    }
    

    Eğer manzaralı bir gezinti denetleyicisi gömülü varsa yöntemi aşağıdaki gibi yukarıda biraz değiştirmek gerekir

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        if([segue.identifier isEqualToString:@"showDetailSegue"]){
            UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
            ViewControllerB *controller = (ViewControllerB *)navController.topViewController;
            controller.isSomethingEnabled = YES;
        }
    }
    

    Bu BOOL değer YES 53 isSomethingEnabled koyacaktır.

Geçen Veri Geri

Veri ViewControllerA 56 *pas için geri kullanmanız gerekebilirProtokol ve DelegeleryaEngellerikincisi geri aramaları için gevşek bir mekanizma olarak kullanılabilir.

Bunu yapmak için ViewControllerA ViewControllerB bir temsilci yapacak. Bu ViewControllerB mesaj ViewControllerA bize geri verileri geri göndermek için sağlayan göndermek için izin verir.

ViewControllerA 64**uygun olmalı ViewControllerB temsilci'belirtmek için var olan s kuralı. olmak için Bunu uygulamak gerekir ViewControllerA söyler.

  1. #import ama yukarıdaki @interface aşağıda ViewControllerB.h, seni protokolü belirtin.

    @class ViewControllerB;
    
    @protocol ViewControllerBDelegate <NSObject>
    - (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item;
    @end
    
  2. sonraki ViewControllerB.h hala delegate bir özellik kur ve ViewControllerB.m sentezlemek gerekir

    @property (nonatomic, weak) id <ViewControllerBDelegate> delegate;
    
  3. ViewControllerB görünüm denetleyicisi biz pop delegate mesaj diyoruz.

    NSString *itemToPassBack = @"Pass this value back to ViewControllerA";
    [self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
    
  4. ViewControllerB için. ViewControllerA.h şimdi ** 79 ViewControllerB ithalat ve Protokole uygun söyle.

    #import "ViewControllerB.h"
    
    @interface ViewControllerA : UIViewController <ViewControllerBDelegate>
    
  5. Bizim protokolü ViewControllerA.m aşağıdaki yöntemi uygulayın

    - (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item
    {
        NSLog(@"This was returned from ViewControllerB %@",item);
    }
    
  6. Yapmamız gereken son şey ViewControllerA ViewControllerB iteriz önce temsilci nav yığını üzerinde ViewControllerB söyle.

    ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
    viewControllerB.delegate = self
    [[self navigationController] pushViewController:viewControllerB animated:YES];
    

Referanslar

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • pissengehen

    pissengehen

    26 EYLÜL 2006
  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008