我有一个检查互联网连接的页面,然后根据结果执行各种操作。例如,如果没有互联网连接,则禁用下载文件的按钮,导航栏中不存在某些按钮,某些文本颜色不同等。
我想添加一个“刷新”按钮,以便用户可以连接到互联网并重新加载页面。
我的问题是,如何刷新视图?调用[self viewDidLoad];肯定是不对的,即使这是所有逻辑存在的地方。我是否需要从superView中删除视图并重新插入它,还是有办法不删除它?
由于
答案 0 :(得分:0)
如果您的功能是检查互联网,并且您使用的是Reachability
类Apple,那么请写
[[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
功能中,您可以更新视图,即相应地启用和禁用按钮。
希望这可以帮助你..
答案 1 :(得分:0)
以单独的方法编写刷新或视图设计的整个逻辑,并在再次刷新时调用它。
ViewDidLoad
{
[self loadViewDesign];
[[(uibutton *) addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventTouchUpInside];
}
- (void)loadViewDesign
{
....
...
..
}
- (void)refreshData
{
[self loadViewDesign];
}
答案 2 :(得分:0)
我会这样做:
在viewDidLoad中,我将创建所有自定义UI元素。我甚至可以在那里布局它们,除非布局有点动态地对数据本身作出反应。我只会创建一次UIElements。
在一个单独的方法中,mayby将命名为configureView - 加载数据(除非那是异步 - 我建议做什么) - 适当地设置UI元素。设置开关值,标签文本等。 - 可能布局元素或隐藏/取消隐藏它们或者enalbe /禁用它们。
在大多数情况下,我会从viewDidLoad调用configureView。或者我会从viewWillBecomeVisible中调用它。在这种情况下,即使从任何其他推送视图返回视图或在标签栏中切换回视图时视图变得可见,视图也会更新。
刷新机制(可能是链接到按钮的操作)将重新加载数据,然后再调用configureView方法。