2011-11-16 58 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在您的自定义初始化程序中为零。这就是为什么没有设定值。