2012-05-10 124 views
0

我是ios新手。我有一個viewController,那裏有一個通知觀察者。 例如UILabel無法更新標籤文本

-(void) myNotificationObFn:(Notification *)noti 
{ 
    /* Here i am trying to change the text of UILabel, which is not working. 
    ie: 
    NSString *ns = [NSString stringWithFormat:@"%d", 10]; 
    mylabel.text = ns; 
    */ 
} 

我該如何解決這個問題?

+0

該方法甚至被稱爲? – CodaFi

+0

CodaFi,對不起。我試着分配新的NSString,並試圖分配。是的,這個函數被調用。 – Whoami

+0

關於文本字段,它是否爲零? – CodaFi

回答

1

如果要更改標籤

例子嘗試使用標籤功能它首次

UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 50)]; 
[myLabel setTag:1234]; 

如果你創建你的XIB或故事板的標籤,只是改變了「標籤」字段

這樣,你的標籤獲得標籤「1234」

在此之後

,如果你需要編輯這個標籤上把這段代碼

UILabel *labelfromtag = (UILabel*)[self.view viewWithTag:1234]; //this code direct label "labelfromtag" to your "myLabel", so your new label here is actually your old label 
NSString *ns = [[NSString alloc] initWithFormat:@"%d", 10]; 

labelfromtag.text = ns; 

好運您的通知方法:]

編輯:另外,這個通知與你的UILabel是否駐留在同一個類/控制器中?

+0

他根本不重新分配標籤。如果myLabel是代碼分配的ivar或IBOutlet ivar鏈接到界面構建器中的標籤,那麼該代碼是完全有效的。不需要標籤來存儲對標籤的引用(你可以這樣做,但他的方式更常見)。 – Joel

+0

啊,我的壞,我沒有正確閱讀,我以爲他重新分配的標籤,我沒有看到它是一個NSString哈哈,編輯 –

0

1 - 您的標籤是否在IB中正確連接?你可以改變你的代碼中的其他地方的文本(例如說viewDidLoad)?

2 - 您不需要分配字符串,因爲您沒有將它保留在此方法的範圍之外。你可以這樣做:

如果編程創建標籤,設置標籤的標籤後,您創建:

[myLabel setText:[NSString stringWithFormat:@"%d",10]]; 
+0

沒有運氣,但是,在非通知函數中,UILabel文本的修改工作正常。不知道爲什麼它在通知功能中不起作用。 – Whoami

+0

您是在代碼中創建標籤(即[UILabel alloc]還是IBOutlet)?當你說改變它在非通知函數工作正常,你是否在創建標籤的相同方法/範圍內做到這一點?我的猜測是,你沒有在創建它的範圍之外保留對標籤的適當引用。 – Joel

3
-(void) myNotificationObFn:(Notification *)noti 
{ 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
     NSString *ns = [NSString stringWithFormat:@"%d", 10]; 
     labelfromtag.text = ns; 
     [labelfromtag setNeedDisplay]; 
    }); 
} 
+0

謝謝...有趣的是,我做的完全相同的東西在Android – Houston

+0

爲什麼你需要這個,因爲myNotificationObFn在主隊列上被調用呢? – Petar