【问题标题】:how can I know current viewcontroller name in iphone我如何知道 iPhone 中当前的视图控制器名称
【发布时间】:2010-04-14 07:05:26
【问题描述】:

我有实现 UIViewController 的 BaseView。项目中的每个视图都必须实现这个 BaseView。

在 BaseView 中,我有方法:

-(void) checkLoginStatus
{
    defaults = [[NSUserDefaults alloc] init];

    if(![[defaults objectForKey:@"USERID"] length] > 0 )
    {
        Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
        [self.navigationController pushViewController:login animated:TRUE];
        [login release];
    }
    [defaults release];
}

问题是我的登录视图也实现了 BaseView,检查登录,并再次打开 LoginView,即陷入递归调用。

如果请求来自 LoginView,我可以检查 checkLoginStatus 方法,然后不采取任何操作,否则检查登录。 例如:

- (void) checkLoginStatus
{
    **if(SubView is NOT Login){** 
        defaults = [[NSUserDefaults alloc] init];

        if(![[defaults objectForKey:@"USERID"] length] > 0 )
        {
            Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
            [self.navigationController pushViewController:login animated:TRUE];
            [login release];
        }
        [defaults release];
    }
}

请帮忙..

【问题讨论】:

    标签: iphone objective-c uiviewcontroller


    【解决方案1】:

    使用以下方法:

    if ([self isMemberOfClass:[Login class]])
    {
        CFShow(@"Yep, it's the login controller");
    }
    

    isMemberOfClass 告诉您该实例是否是该类的确切实例。还有isKindOfClass

    if ([self isKindOfClass:[BaseView class]])
    {
        CFShow(@"This will log for all classes that extend BaseView");
    }
    

    isKind 测试该类是某个类的扩展。

    所以给出你的例子:

    -(void) checkLoginStatus
    {
        defaults = [[NSUserDefaults alloc] init];
    
        if (![self isMemberOfClass:[Login class]])
        {
            if (![[defaults objectForKey:@"USERID"] length] > 0 )
            {
                Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
                [self.navigationController pushViewController:login animated:TRUE];
                [login release];
            }
        }
        [defaults release];
    }
    

    【讨论】:

      【解决方案2】:

      在 Login 中实现一个空的 checkLoginStatus。

      @implementation Login
        -(void) checkLoginStatus {}
      @end
      

      【讨论】:

        【解决方案3】:

        在 checkLoginStatus 中添加一个参数,并在您从 LoginView 调用方法时设置该参数,如果设置了该参数,则在 checkLoginStatus 中检查该参数跳过此块...即

        if(![[defaults objectForKey:@"USERID"] length] > 0  && var1 != TRUE)
        {
             Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
            [self.navigationController pushViewController:login animated:TRUE];
            [login release];
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-15
          • 1970-01-01
          • 1970-01-01
          • 2018-06-30
          • 1970-01-01
          相关资源
          最近更新 更多