0

我有一个页面检查互联网连接,然后根据结果执行各种操作。例如,如果没有互联网连接,下载文件的按钮被禁用,导航栏中不存在某些按钮,某些文本颜色不同等。

我想添加一个“刷新”按钮,以便用户可以连接到互联网并重新加载页面。

我的问题是,如何刷新视图?调用 [self viewDidLoad]; 肯定是不对的,即使这是所有逻辑都存在的地方。我是否需要从 superView 中删除视图并重新插入它,或者有没有办法在不删除的情况下做到这一点?

谢谢

4

3 回答 3

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功能中,您可以更新您的视图,即相应地启用和禁用按钮。

希望这可以帮助你..

于 2013-02-01T12:58:51.760 回答
0

在单独的方法中编写刷新或查看设计的整个逻辑,并在再次刷新时调用它。

 ViewDidLoad
  {
    [self loadViewDesign];
  [[(uibutton *) addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventTouchUpInside];
  }

- (void)loadViewDesign
  {
     ....
       ...
        ..
     }

 - (void)refreshData
   {
 [self loadViewDesign];
   }
于 2013-02-01T13:15:54.763 回答
0

我会这样做:

在 viewDidLoad 中,我将创建所有自定义 UI 元素。我什至可以在那里布局它们,除非布局有点动态地对数据本身做出反应。我只会创建一次 UIElements。

在一个单独的方法中,也许命名为 configureView 我会 - 加载数据(除非这是异步的 - 我建议这样做) - 相应地设置 UI 元素。设置开关值、标签文本等 - 可能布局元素或隐藏/取消隐藏它们或启用/禁用它们。

在大多数情况下,我会从 viewDidLoad 调用 configureView。或者我会从 viewWillBecomeVisible 中调用它。在这种情况下,即使从任何其他推送视图返回或在选项卡栏中切换回视图时视图变得可见,视图也会更新。

刷新机制(可能是链接到按钮的操作)将重新加载数据,然后也调用 configureView 方法。

于 2013-02-01T13:23:51.807 回答