2015-11-25 16 views
0

在MainViewController .h文件:IOS - 方法被調用,但不更新UI

-(void)startTrackingParking:(int)hour :(int)minute :(int)second;

在MainViewController .m文件:

-(void)startTrackingParking:(int)hourTrack :(int)minuteTrack :(int)secondTrack { 
    NSLog(@"%d %d %d",hourTrack,minuteTrack,secondTrack); 

     //Set buttons alpha to 0 
     self.extendParking.alpha = 0; 
     self.bannerCancelButton.alpha = 0; 
     self.timeLeftLabel.alpha = 0; 

} 

在我的其他類,然後我做的:

MainViewController *class = [[MainViewController alloc]init]; [class startTrackingParking:hourTrack :minuteTrack :secondTrack];

由於某種原因NSlog調用,但按鈕alpha不會更新?這是爲什麼發生?這是在類和調用方法之間傳遞數據的錯誤方法嗎?

+0

確實MainViewController仍然呈現當你調用該代碼? – Tj3n

+0

@ Tj3n我曾嘗試過拖延調用'startTrackingParking',它沒有幫助? – Josh

+2

你是如何初始化你的UI組件的? – aViNaSh

回答

1

當你這樣做:

MainViewController *class = [[MainViewController alloc]init]; 
[class startTrackingParking:hourTrack :minuteTrack :secondTrack]; 

創建類MainViewController的一個實例。與類關聯的視圖未被初始化。

視圖控制器懶洋洋地加載他們的視圖。第一次訪問視圖屬性加載或創建視圖控制器的視圖。可以使用UIStoryBoard方法instantiateViewControllerWithIdentifier:

看一看at the docs

+0

這與延遲加載沒有關係(UIViewController不這樣做)。如果UIViewController來自故事板或NIB,則需要使用適當的方法來創建VC。如果它以編程方式設置,那麼你可以在init方法中執行此操作。 – Paulw11

+0

@ Paulw11請查看「視圖管理」部分:https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIViewController_Class/ –

+0

好吧,公平的,但仍然不是'這裏的問題是因爲OP沒有正確加載來自NIB或故事板的VC – Paulw11

1

當你做到這一點 -

MainViewController *class = [[MainViewController alloc]init]; 
[class startTrackingParking:hourTrack :minuteTrack :secondTrack]; 

您分配的新實例,您MainViewController但不能從筆尖或故事板初始化它,所以它不會有任何控制。這也意味着它不會實際顯示在屏幕上。你可能有一些其他的這個視圖控制器的實例正在設置和呈現(大概它是故事板中的初始視圖控制器,因爲它被稱爲MainViewController),但這不是這個。

此外,由於這是一個局部變量,只要該方法退出,它將被丟棄。