Melewati data ke pengontrol tampilan berbeda ketika pengontrol disajikan secara modal?

Saya cukup baru dalam hal iOS, dan saya pikir saya memahami meneruskan data ke pengontrol tampilan. Ternyata tidak. Saya mencoba meneruskan data gambar dari ViewController induk ke ViewController anak yang disajikan secara modal. Saya pikir masalahnya ada hubungannya dengan cara objek diteruskan ke pengontrol tampilan yang disajikan secara modern, bukan yang didorong ke tumpukan navigasi. Di bawah ini adalah kode dari orang tua dan anak terkait dengan masalah yang saya alami.

Dari Orang Tua.m:

- (IBAction)sort:(id)sender {
    SortSelectViewController *ssvc = [self.storyboard instantiateViewControllerWithIdentifier:@"sort"];
    ssvc.backgroundImage = [self screenshot];
    [self performSegueWithIdentifier:@"sort" sender:self];
    //The segue is linked from my parent view controller to my child with the identifier "sort"

}

- (UIImage *) screenshot {
    CGRect rect = CGRectMake(0, 20, 640, 1116);
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);

    [self.view drawViewHierarchyInRect:rect afterScreenUpdates:YES];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    return image;
}

Ini di Child.h

@property (nonatomic, strong) UIImage *backgroundImage;

Ini Anakku.m:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"%@", self.backgroundImage);
    //This log will return nil when the program is run - clear sign data is not being correctly passed
    self.backgroundImage = [self.backgroundImage applyDarkEffect];
    self.imageView.image = self.backgroundImage;
}

Saya telah mengimpor pengontrol tampilan anak saya ke kelas induk saya


person smallTeamCraft Development    schedule 17.01.2014    source sumber
comment
kemungkinan duplikat Bagaimana cara meneruskan informasi antar segmen storyboard?   -  person Midhun MP    schedule 17.01.2014
comment
Cobalah untuk membawa gambar di delegasi aplikasi dan tetapkan gambar di pengontrol tampilan anak dalam metode viewwillapper   -  person Charan Giri    schedule 17.01.2014


Jawaban (2)


coba Seperti Ini Dengan menggunakan Story Bord Harus menggunakan kombinasi dua Metode performSegueWithIdentifier: *prepareForSegue:*

    - (IBAction)sort:(id)sender {

        [self performSegueWithIdentifier:@"sort" sender:self];
        //The segue is linked from my parent view controller to my child with the identifier "sort"

    }



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

        if ([[segue identifier] isEqualToString:@"sort"])
        {
           SortSelectViewController *ssvc = [segue destinationViewController];
        ssvc.backgroundImage = [self screenshot];
        }
     }

- (UIImage *) screenshot {
       //return normal image 
    return [UIImage imagenamed:"imagename.png"];
}
person Muralikrishna    schedule 17.01.2014
comment
EDIT: maaf saya tidak mengubah metode inisialisasi pengontrol tampilan ke metode itu. Itu berhasil, tetapi mengapa saya tidak bisa melakukan semuanya hanya dengan menekan tombol? - person smallTeamCraft Development; 17.01.2014

Kode Anda (pertanyaan awal) menggabungkan contoh langsung dari pengontrol tampilan dan segmen storyboard. Saat Anda menggunakan storyboard segue, VC dibuat secara otomatis untuk Anda. Anda mengaksesnya sebagai "pengontrol tampilan tujuan" di segmen dalam metode "prepareForSegue:".

Apa yang terjadi adalah Anda membuat instance pengontrol tampilan, mengatur gambar, lalu… gambar tersebut dibuang dan diabaikan (seluruh vc).

Selanjutnya, Anda memulai segue, yang ditangani iOS dengan membuat instance yang lain, pengontrol tampilan yang berbeda. Pengontrol tampilan inilah yang dihadirkan iOS.

Jadi: jika Anda akan menggunakan segmen Storyboard, iOS akan membuat instance VC untuk Anda. Jangan membuat instance sendiri, karena tidak ada cara untuk menghubungkan yang Anda buat ke dalam penanganan segue iOS. Yang Anda contohkan adalah tambahan tidak relevan yang diabaikan.

person Bill Patterson    schedule 17.01.2014
comment
Luar biasa. Penjelasan yang bagus. Itu yang saya cari! - person smallTeamCraft Development; 17.01.2014