我有一個mapkit應用程序,我在其中創建了自定義標註視圖。我似乎無法讓視圖上的標籤更新。這是我的設置:無法在由自定義UIViewController控制的UILabel上設置文本
我有一個名爲VendorAnnotation與5個字符串屬性(電話和4個地址線)的自定義註釋類。 VendorAnnotation對象將其右側的CalloutAccessoryView設置爲UIButton。在委託方法中: `(void)mapView:(MKMapVIew *)mapView annotationView:(MKAnnotationView *)view calloutAccessroyControlTapped:(UIControl *)control{}
我通過註釋屬性訪問5個字符串:
VendorAnnotation v =(VendorAnnotation *)view.annotation; 然後我有: DetailViewController *detailVC = [[DetailViewController alloc] initWithDetails:v.phone add1:v.add1 add2:v.add2 add3:v.add3 add4:v.add4];
我通過逐步瞭解,在這一點上,這些字符串屬性(v。*)具有準確的值。 問題是,這個initWithDetails方法不會設置標籤文本。這裏是我的DetailViewController類代碼:
DetailViewController.h:
@interface DetailViewController : UIViewController
{
IBOutlet UILabel *_phone;
IBOutlet UILabel *_add1;
IBOutlet UILabel *_add2;
IBOutlet UILabel *_add3;
IBOutlet UILabel *_add4;
}
- (id)initWithDetails:(NSString *)p add1:(NSString *)a add2:(NSString *)aa add3:(NSString *)aaa add4:(NSString *)aaaa;
@end
DetailViewController.m:
#import "DetailViewController.h"
@implementation DetailViewController
- (id)initWithDetails:(NSString *)p add1:(NSString *)a add2:(NSString *)aa add3:(NSString *)aaa add4:(NSString *)aaaa
{
self = [super init];
if (self) {
[_phone setText:p];
[_add1 setText:a];
[_add2 setText:aa];
[_add3 setText:aaa];
[_add4 setText:aaaa];
}
return self;
}
我不知道爲什麼,但標籤的文本屬性永遠不會設置爲適當的字符串。請幫忙。我知道這是愚蠢的,我是新的客觀的C和iOS編程,但我沒有看到問題。我應該提到我已將IB中.xib上的標籤連接到相應的IBOutlet屬性。
Duhhhhhhhhhhhhhhhh .. ...我已經嘗試過你的第二個建議(將標籤創建爲屬性並以這種方式分配它們,如果我完成它在初始化之後。底線是你是對的,在init方法被調用的時候,視圖還沒有從xib加載。我向該類添加了字符串屬性,並在init方法中分配了這些屬性,然後在viewDidLoad方法中設置標籤文本。像魅力一樣工作!謝謝! – HackyStack
也許你不必創建一個字符串屬性。 嘗試將IBOutlets聲明爲屬性,並將它們連接到IB中。 初始化DetailViewController使用'initWithNibName'並在初始化後分配文本。 接口在初始化時加載的方式(我認爲它會工作得更好,具有更少的屬性) – Frade