2011-11-16 37 views
2

我有一個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屬性。

回答

1

也許是因爲 「P」, 「A」, 「AA」 ......不啓動..

嘗試在- (void)viewDidLoad代替初始化。

或替代使用的:

detailVC = [[DetailViewController alloc] initWithDetails:v.phone add1:v.add1 add2:v.add2 add3:v.add3 add4:v.add4]; 

你爲什麼不使用自定義init方法,然後做這樣的事情:

detailVC.YOUR_LABEL.text = @"Your TEXT"; 

detailVC.YOUR_LABEL.text = v.add1; 
+0

Duhhhhhhhhhhhhhhhh .. ...我已經嘗試過你的第二個建議(將標籤創建爲屬性並以這種方式分配它們,如果我完成它在初始化之後。底線是你是對的,在init方法被調用的時候,視圖還沒有從xib加載。我向該類添加了字符串屬性,並在init方法中分配了這些屬性,然後在viewDidLoad方法中設置標籤文本。像魅力一樣工作!謝謝! – HackyStack

+0

也許你不必創建一個字符串屬性。 嘗試將IBOutlets聲明爲屬性,並將它們連接到IB中。 初始化DetailViewController使用'initWithNibName'並在初始化後分配文本。 接口在初始化時加載的方式(我認爲它會工作得更好,具有更少的屬性) – Frade

0

您的插座i-vars在您的自定義初始化程序中爲零。這就是爲什麼沒有設定值。