比如A,B两个view,值从A传到B。
在B里面写
A *av = [[A alloc]init]; [av setDelegate:self]
和在A里面写
B *bv = [[B alloc]init]; [self setDelegate:bv];
这句setDelegate要放哪里呢?viewDidLoad?没有报错,但是就是传值不成功。能给我一点提示吗?
#import <Foundation/Foundation.h> @protocol delegate <NSObject> -(void)passString:(NSString *)string; @end
#import <UIKit/UIKit.h> #import "labelViewController.h" #import "delegate.h" @interface buttonViewController : UIViewController @property (weak, nonatomic) IBOutlet UIButton *button; @property (weak,nonatomic) id <delegate> delegate; - (IBAction)buttonPress:(UIButton *)sender; @end
#import "buttonViewController.h" @interface buttonViewController () @end @implementation buttonViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { labelViewController *lv = [[labelViewController alloc]init]; [self setDelegate:lv]; [super viewDidLoad]; // Do any additional setup after loading the view. } - (IBAction)buttonPress:(UIButton *)sender { [self.delegate passString:sender.currentTitle]; [self performSegueWithIdentifier:@"push" sender:self]; } @end
#import <UIKit/UIKit.h> #import "delegate.h" @interface labelViewController : UIViewController <delegate> @property (weak, nonatomic) IBOutlet UILabel *label; @end
#import "labelViewController.h" @interface labelViewController () @end @implementation labelViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)passString:(NSString *)string{ self.label.text = string; NSLog(@"%@",self.label.text); } @end
sepatutnya
Nah, A dalam soalan ialah nama kelas, bagaimana saya boleh setDelegate?
Saya tidak begitu faham maksud soalan itu. . . Saya cadangkan anda menyiarkan keperluan dan kod yang lengkap. Saya telah menggunakan kedua-dua coretan kod yang anda berikan dalam situasi yang berbeza. . . Semuanya boleh
Pertama, saya hanya boleh mempopularkan ilmu perwakilan mengikut pemahaman saya.
Biar saya jelaskan dahulu apa itu delgate Terjemahan literal delgate dipanggil agensi.
Contoh fungsinya:
Laksanakan kod yang mengawal kelas B dalam kelas A, dan tetapkan perwakilan atribut contoh kelas B kepada contoh kelas A.
Setelah memahami prinsip perwakilan, mari lihat kod dalam soalan anda
adalah munasabah, tetapi cara penulisan lain, menetapkan Perwakilan kepada contoh yang dimulakan adalah pelik (walaupun saya telah menggunakannya sebelum ini, tetapi ia adalah kes yang sangat istimewa)
SupplementMari kita bincangkan tentang isu viewDidLoad Fungsi ini dipanggil selepas keseluruhan View dimulakan dan pemuatan selesai. Secara amnya, anda menetapkan nilai di sini dan memulakan subview.
Ada beberapa soalan
1. Cuba jangan gunakan perkataan simpanan dalam nama kelas perwakilan, ia kelihatan terlalu pelik
2. Penggunaan perwakilan adalah untuk mentakrifkan contoh perwakilan dalam LabelViewController dan kemudian memanggil kaedah perwakilan
3. Pelaksanaan perwakilan hendaklah ButtonViewController
Kod adalah seperti berikut:
LabelViewController.h
LabelViewController.m
ButtonViewController.h
ButtonViewController.m
Jika anda faham maksud delegate, anda akan tahu cara menggunakan delegate.
Ringkasnya, sesuatu telah berlaku dan saya tidak dapat menanganinya, jadi saya perlu menggunakan kuasa luar. Sebagai contoh, jika saya ingin pergi jauh, pastinya tidak praktikal untuk pergi Dalam kes ini, saya perlu menggunakan pengangkutan, seperti kereta, kereta api, dan kapal terbang. Selagi kenderaan ini melaksanakan protokol tertentu, ia dipastikan tidak akan berlaku ralat semasa memanggil kaedah kenderaan.
Jika saya mengambil inisiatif untuk menetapkan perwakilan, seperti: I.delegate = kereta api. Ia tidak salah, tetapi ia tidak masuk akal. Fleksibiliti perwakilan tidak wujud, dan saya terikat dengan kenderaan tertentu. Jadi .delegate saya perlu ditetapkan secara luaran. Bagi saya, hanya melaksanakan my.delegate.go pada masa yang sesuai berfungsi. Alangkah baiknya jika perwakilan itu adalah kapal terbang Jika ia adalah Linke, terima saja.