2016-11-26 1 views
0

У меня есть приложение, подобное Facebook. Я хочу нажимать и всплывать в swreveal view controller. Как это можно достичь? Проверьте следующее изображение.Как я могу нажимать pop в swreveal view controller в ios?

enter image description here

Любая помощь будет оценена.

+0

AppCoda сделал учебник, используя SWRevealViewController некоторое время назад. Они дают довольно подробные инструкции. http://www.appcoda.com/ios-programming-sidebar-navigation-menu/ – Erik

+0

@ Erik, пожалуйста, проверьте изображение. –

ответ

4

Я бы раскадровку как это:

enter image description here

В LoginViewController:

@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) 
} 

DashboardViewController:

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, но вы можете легко перевести!

+0

вы можете конвертировать в objc –

+0

Нет, это так просто, что вы можете приложить усилия для этого, я думаю. –

+0

Я новичок в ios –

0

В своем делетете у вас есть менеджер Login/Dashboard через rootViewController окна.

Шаг 1: В вашем AppDelegate написать метод, вызовите например setupRootVC()

func setupRootVC(){ 
    if userIsLoggedIn{ 
     window.rootViewController = yourSWRevealControllerObj 
    }else{ 
     window.rootViewController = yourLoginControllerObj 
    } 
} 

Шаг 2: Вызов setupRootVC() метод из didFinishLaunchingWithOptions метода.

Шаг 3: В вашем LoginVC, после того, как пользователь вошел в успешно называют setupRootVC() метод AppDelegate в.

Шаг 4: Убедитесь frontViewController из SWRevealController внутри UINavigationController так, что ваш может толкать и поп-музыки через него.

Я предлагаю вам узнать больше об архитектуре приложений iOS и о том, как работают rootViewController и UINavigationController. Надеюсь, что помогает.

+0

Можете ли вы дать демонстрацию .. в объекте c –

+1

Скажите, что вы пробовали, Stackoverflow не для что вы просите. –

0

, если вы хотите, чтобы подтолкнуть от 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]; 
0

Вы можете использовать метод 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]; 
Смежные вопросы