如何在 ios 的 swreveal 视图控制器中推送弹出窗口?
Posted
技术标签:
【中文标题】如何在 ios 的 swreveal 视图控制器中推送弹出窗口?【英文标题】:How can i push pop in swreveal view controller in ios? 【发布时间】:2016-11-26 04:32:04 【问题描述】:我有一个像 Facebook 这样的应用程序。我想在 swreveal 视图控制器中推送和弹出。怎样才能做到这一点?检查下图。
任何帮助将不胜感激。
【问题讨论】:
AppCoda 不久前使用 SWRevealViewController 做了一个教程。他们给出了非常详细的说明。 appcoda.com/ios-programming-sidebar-navigation-menu @Erik 请检查图片.. 【参考方案1】:我会有一个这样的故事板:
在登录视图控制器中:
@IBAction func skip(_ sender: Any)
// Show dashboard
let sb = UIStoryboard(name: "Main", bundle: nil)
let controller = sb.instantiateViewController(withIdentifier: "DashboardNavigationController")
revealViewController().setFront(controller, animated: true)
@IBAction func validateUser(_ sender: Any)
// show profile
// Here test for valid user name and password
// If OK
let sb = UIStoryboard(name: "Main", bundle: nil)
let dashboardNC = sb.instantiateViewController(withIdentifier: "DashboardNavigationController") as! UINavigationController
let profileVC = sb.instantiateViewController(withIdentifier: "ProfileViewController")
dashboardNC .pushViewController(profileVC, animated: false)
revealViewController().setFront(dashboardNC, animated: true)
@IBAction func dismissKeyboard(_ textField: UITextField)
textField.resignFirstResponder()
在MenuTableViewController(SideMenu)中:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath, animated: true)
// ...
let dashboardNC = revealViewController().frontViewController as! UINavigationController
let nc = revealViewController().frontViewController as! UINavigationController
let vc = nc.topViewController
if !(vc is ProfileViewController)
// Instantiate controller from story board
let sb = UIStoryboard(name: "Main", bundle: nil)
let controller = sb.instantiateViewController(withIdentifier: "ProfileViewController")
dashboardNC.pushViewController(controller, animated: false)
// Push it with SWRevealViewController
revealViewController().pushFrontViewController(dashboardNC, animated: true)
仪表板视图控制器:
class DashboardViewController: UIViewController
@IBOutlet weak var revealButton: UIBarButtonItem!
@IBOutlet weak var rightButton: UIBarButtonItem!
override func viewDidLoad()
super.viewDidLoad()
revealButton.target = revealViewController()
revealButton.action = #selector(SWRevealViewController.revealToggle(_:))
rightButton.target = revealViewController()
rightButton.action = #selector(SWRevealViewController.rightRevealToggle(_:))
revealViewController().tapGestureRecognizer()
revealViewController().panGestureRecognizer()
revealViewController().rearViewRevealOverdraw = 0
revealViewController().rightViewRevealOverdraw = 0
不是 Objective-C,但你可以轻松翻译!
【讨论】:
能不能转换成objc 不,我认为这很简单,您可以为此付出努力。 我是ios新手 是的,那么你必须学习苹果的文档。强烈推荐! 请帮我解决这个问题...我知道导航但它是第三方这就是我感到困惑的原因【参考方案2】:在您的应用委托中,您必须通过窗口的 rootViewController 管理登录/仪表板。
第 1 步:
在你的 AppDelegate 中写一个方法,例如调用setupRootVC()
func setupRootVC()
if userIsLoggedIn
window.rootViewController = yourSWRevealControllerObj
else
window.rootViewController = yourLoginControllerObj
第2步:从didFinishLaunchingWithOptions
方法调用setupRootVC()
方法。
第三步:在你的LoginVC
中,用户登录成功后调用AppDelegate的setupRootVC()
方法。
第 4 步:确保 frontViewController
或 SWRevealController
位于 UINavigationController
内,以便您可以推入并弹出它。
我建议您阅读更多有关 iOS 应用架构以及 rootViewController
和 UINavigationController
工作原理的信息。
希望对您有所帮助。
【讨论】:
能否给demo..in Objective c 告诉我你有什么尝试,*** 不适合你的要求。【参考方案3】:如果你想从 swreveal 推送到任何控制器
UIStoryboard*Storyboard=[AppDelegate storyBoardType];
yourController *your=(yourController*)[Storyboard instantiateViewControllerWithIdentifier:@"yourControllerId"];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: your];
[navController setViewControllers: @[your] animated: YES];
[self.revealViewController setFrontViewController:navController];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
从任何控制器到 swreveal 视图控制器,您必须在您的操作单击中添加此行
[self.revealViewController revealToggleAnimated:YES];
【讨论】:
【参考方案4】:你可以使用 UINavigationController 的方法:
- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated NS_AVAILABLE_IOS(3_0);
但请注意,它设置了整个导航控制器堆栈。 所以你可能不得不采取你当前的视图控制器状态 从属性
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
分配一个新的
NSMutableArray *controllers = [NSMutableArray arrayWithArray:self.navigationController viewControllers];
[controllers addObject:VC1];
[controllers addObject:VC2];
[controllers addObject:VC3];
[self.navigationController setViewControllers:controllers animated:YES];
【讨论】:
以上是关于如何在 ios 的 swreveal 视图控制器中推送弹出窗口?的主要内容,如果未能解决你的问题,请参考以下文章
如何将值从 tableview 传递到 collectionview