我的UITabbarController
中有3个标签,是我在Appdelegate中创建的。
当我打开应用程序时,我已将选定的tabbarItem作为第三个tabbarItem。
用户只能在登录时选择索引0处的UITabBarItem
。
我试图限制用户在TabBarItem_0
时转到TabBarItem_2
。
但没有任何效果。我用了
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
}
但它没有按照我的意愿工作。我检查了stackoverflow,发现了几乎相同的问题,在那里我找到了这个委托。但这并不适合我。我用谷歌搜索,但除了stackoverflows链接之外无法找到任何解决方案,这次没有帮助。
点击禁用的TabBar项目,我必须弹出一个弹出窗口。我该如何实现呢?
答案 0 :(得分:15)
尝试这样的事情,
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;
{
if (tabBarController.selectedIndex == 0) {
if(isUserLoggedIn)
return YES;
else
return NO;
}
return YES;
}
如果这不起作用,
在app delegate
中创建栏栏后添加此项[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:FALSE];
登录后再次启用
[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:TRUE];
答案 1 :(得分:6)
这就是我在Swift 2.1中所做的:
public class BaseActivity extends AppCompatActivity {
protected MyApp application;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
application = (MyApp) getApplication();
if (application.getAuth() == null || !application.getAuth().isLoggedIn()) {
startActivity(new Intent(this, LoginActivity.class));
finish();
return;
}
}
}
答案 2 :(得分:6)
当我点击标签栏项目时,我常常在当前视图的顶部显示弹出窗口。
在TabBarViewController类中,实现UITabBarControllerDelegate
并记住设置self.delegate = self
。
之后
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
if viewController.title == "Unique_title" //set an unique title for the view controller in storyboard or the view controller class.
{
performSegueWithIdentifier("YourModalViewIdentifier", sender: nil)
return false
} else {
return true
}
}
这应该可以帮助您在uitabbaritem上收到点击时显示模态视图。我知道使用title作为唯一标识符是不好的做法,但只是快速解决方案来实现你想要的。
希望有所帮助。
答案 3 :(得分:4)
您可以在代码中执行此操作
- (void)viewDidLoad {
...
[self checkLogin];
...
}
- (void)checkLogin {
if (!loggedIn) {
[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:NO];
} else {
[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:YES];
}
}
- (void)tapLogin {
// Do the login action
}
- (void)processLoginResult {
// Process the result of the login action
// If the result is success, set 'loggedIn = YES'
// Otherwise, set 'loggedIn = NO'
...
[self checkLogin];
...
}
答案 4 :(得分:3)
答案 5 :(得分:0)
以下是在 Swift 3和4
中禁用标签栏项目的方法tabBarController.tabBar.items![0].isEnabled = false