开发者

how can I know current viewcontroller name in iphone

开发者 https://www.devze.com 2022-12-26 14:24 出处:网络
I have BaseView which implement UIViewController. Every view in project must implement this BaseView.

I have BaseView which implement UIViewController. Every view in project must implement this BaseView.

In BaseView, I have method:

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

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

The problem is my Login view also implement BaseView, checks for login, and again open LoginView i.e. stuck in to recursive calling.

Can I check in checkLoginStatus method if request is from LoginView then take no action else check login. Ex:

- (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];
    }
}

Please help..


Use the following method:

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

isMemberOfClass tells you if the instance is an exact instance of that class. There's also isKindOfClass:

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

isKind tests that the class is a extension of a certain class.

So given your example:

-(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];
}


implement an empty checkLoginStatus in Login.

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


Add one parameter in checkLoginStatus and set that parameter when you you call method from LoginView and in checkLoginStatus check that parameter if that parameter is set skip this block...i.e

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

}
0

精彩评论

暂无评论...
验证码 换一张
取 消