我有一個頁面,用於檢查Internet連接,然後根據結果執行各種操作。例如,如果沒有互聯網連接,禁用下載文件的按鈕,某些按鈕不在導航欄中,某些文本是不同的顏色等。Objective-c如何重新加載視圖
我想添加一個「刷新」按鈕,所以用戶可以連接到互聯網並重新加載頁面。
我的問題是,我該如何做視圖刷新?調用[self viewDidLoad];肯定是不正確的,即使這是所有邏輯存在的地方。我是否需要從超級視圖中刪除視圖並重新插入視圖或者有沒有辦法在不刪除的情況下執行視圖?
感謝
我有一個頁面,用於檢查Internet連接,然後根據結果執行各種操作。例如,如果沒有互聯網連接,禁用下載文件的按鈕,某些按鈕不在導航欄中,某些文本是不同的顏色等。Objective-c如何重新加載視圖
我想添加一個「刷新」按鈕,所以用戶可以連接到互聯網並重新加載頁面。
我的問題是,我該如何做視圖刷新?調用[self viewDidLoad];肯定是不正確的,即使這是所有邏輯存在的地方。我是否需要從超級視圖中刪除視圖並重新插入視圖或者有沒有辦法在不刪除的情況下執行視圖?
感謝
寫的清爽或視圖設計整個邏輯在不同的方法,並調用它,當你再次刷新它。
ViewDidLoad
{
[self loadViewDesign];
[[(uibutton *) addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventTouchUpInside];
}
- (void)loadViewDesign
{
....
...
..
}
- (void)refreshData
{
[self loadViewDesign];
}
感謝您的全力幫助。有很多東西需要從這裏拿走。我認爲使用可達性對於這個實例來說是一種矯枉過正,儘管我之前使用過它。遵循給出的建議,我將在我的.h文件中聲明這些元素,將它們放在我的viewDidLoad中,並用新方法對其進行自定義。我猜想我想知道的是「有沒有簡單的重新加載視圖」,但我從這些回答中收集答案是否定的。再次感謝你們。 – Typhoon101
如果你的功能是檢查互聯網,如果你正在使用Reachability
類蘋果的,然後寫
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
在viewDidLoad
,
,然後編寫代碼
-(void)startInternetAvailableCheck
{
internetReach = [Reachability reachabilityForInternetConnection];
[internetReach startNotifier];
[self updateInterfaceWithReachability: internetReach];
}
-(void)updateInterfaceWithReachability:(Reachability*)curReach
{
if(curReach == internetReach)
{
NetworkStatus netStatus = [curReach currentReachabilityStatus];
switch (netStatus)
{
case NotReachable:
{
MyLog(@"Access Not Available");
break;
}
case ReachableViaWWAN:
{
MyLog(@"Reachable WWAN");
break;
}
case ReachableViaWiFi:
{
MyLog(@"Reachable WiFi");
break;
}
}
}
}
//Called by Reachability whenever status changes.
- (void) reachabilityChanged: (NSNotification*)note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateInterfaceWithReachability: curReach];
}
和上面的我提示updateInterfaceWithReachability
功能,您可以更新您的視圖,即相應地啓用和禁用按鈕。
希望這有助於你..
我會做這種方式:
在viewDidLoad中我會爲所有自定義UI元素。我甚至可以在那裏佈置它們,除非佈局對數據本身有動態反應。我只會創建一次UIElements。
在一個單獨的方法,mayby命名爲configureView我會 - 加載數據(除非這是異步 - 我建議這樣做) - 按順序設置UI元素。設置開關值,標籤文本等 - 可能佈置元素或隱藏/取消隱藏或enalbe /禁用它們。
在大多數情況下,我會從viewDidLoad調用configureView。或者我會從viewWillBecomeVisible中調用它。在這種情況下,即使從任何其他推送視圖返回的視圖變爲可見或切換回標籤欄時,視圖也會更新。
刷新機制(可能是鏈接到按鈕的操作)將重新加載數據,然後調用configureView方法。
你現在如何加載視圖?從'viewDidLoad'?那麼你可以將代碼移動到一個新的方法'重新加載',而不是調用它 –
你可能應該將該代碼移動到一些可達性通知回調,因爲網絡連接可以來來去去。 –
我的確在考慮將viewDidLoad代碼移動到新的方法,但代碼基於Internet連接以編程方式向頁面添加元素。如果我點擊刷新按鈕後再次調用該方法,所有這些元素將再次被添加...並且再次...並且再次。當然,我可以先刪除所有的頁面元素(按鈕,標籤,圖片等),但這似乎有些反作用,尤其是考慮到隨着時間的推移會在代碼中添加更多的項目。是否沒有簡單地重新加載頁面的指令? – Typhoon101