UIViewController присутствует и увольняется - PullRequest
0 голосов
/ 14 октября 2019

В моем коде доступно 3 viewController. Я написал код для представления контроллера третьего вида с первого контроллера представления.

В контроллере третьего вида доступны 2 кнопки (готово и отмена). Когда янажмите готовую кнопку 2-й вид контроллера должен присутствовать.

Как написать код для этого?

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

вы можете использовать делегат. Используя делегат, вы можете вызвать метод 1st View controller для представления 2nd Controller из вашего контроллера третьего представления. Кнопка Done

Пример кода: FirstViewController.swift

import UIKit

public protocol GoToSecondVCDelegate : class {
func gotoSecondVC()
}

class FirstViewController: UIViewController, GoToSecondVCDelegate   {

override func viewDidLoad() {
    super.viewDidLoad()

}

@IBAction func gotoThirdVC(sender : UIButton){
    let thirdVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController
    thirdVC.delegate = self
    self.present(thirdVC, animated: true, completion: nil)
}
func gotoSecondVC() {
    let secondVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    self.present(secondVC, animated: true, completion: nil)
}
}

SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}
@IBAction func cancelClick(sender : UIButton)
{
    self.dismiss(animated: true, completion: nil)

}
}

ThirdViewController.swift

import UIKit

class ThirdViewController: UIViewController {

var delegate : GoToSecondVCDelegate!
override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}
@IBAction func doneClick(sender : UIButton)
{
    self.dismiss(animated: true, completion: nil)
    delegate.gotoSecondVC()
}
@IBAction func cancelClick(sender : UIButton)
{
     self.dismiss(animated: true, completion: nil)
}
}
0 голосов
/ 14 октября 2019

Во-первых, я рекомендую вам поискать и посмотреть Objective-C документацию и примеры. Но есть основные из того, как представить UIViewController.

SecondViewController *controller = [SecondViewController new];

, если вы хотите использовать блок завершения

[self presentViewController:controller animated:YES completion:^{

}];

или если вы хотите использовать только что присутствующий.

[self presentViewController:controller animated:YES completion:nil];

// РедактироватьРаздел

Итак, я предполагаю, что кнопки, как показано ниже.

UIButton *toGoSecond;
UIButton *toGoThird;

Затем в методе viewDidLoad вы можете assign действия для этих кнопок.

[toGoSecond addTarget:self action:@selector(goToSecond) forControlEvents:UIControlEventTouchUpInside];
    [toGoThird addTarget:self action:@selector(goToThird) forControlEvents:UIControlEventTouchUpInside];

И есть функции обработчика презентации.

-(void) goToSecond{
    SecondController *second = [SecondController new];
    [self presentViewController:second animated:TRUE completion:nil];
}

-(void) goToThird{
    ThirdController *thirdController = [ThirdController new];
    [self presentViewController:thirdController animated:TRUE completion:nil];
}

Я думаю, что небольшой поиск и просмотр руководств может помочь вам понять вашу проблему, я надеюсь, что отредактированный ответ поможет вам.

// ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ

Эй, я не могу полностью понять вашу проблему, когда отвечаю на это, но я решаю вашу проблему с помощью шаблона делегирования.

Iсоздали 3 контроллера с именами ViewController, SecondViewController, ThirdViewController.

Итак, поехали.

Создайте протокол.

@protocol ProtocolName
-(void) go;
@end

Тогданазначьте его первому контроллеру представления, как показано ниже.

@interface ViewController : UIViewController<ProtocolName>

Чем в файле ViewController.m заполнить метод go.

- (void)go{
    NSLog(@"triggered");
    SecondViewController *second = [SecondViewController new];
    [self presentViewController:second animated:TRUE completion:nil];
}

Затем в файл ThirdController.h положитьdelegate как weak переменная.

@interface ThirdViewController : UIViewController
@property (nonatomic,weak) id<ProtocolName> delegate;
@end

Перед переходом к ThirdViewController из FirstViewController назначьте его делегата, как показано ниже.

-(void) goToThird{
    ThirdViewController *thirdController = [ThirdViewController new];
    [thirdController setDelegate:self];
    [self presentViewController:thirdController animated:TRUE completion:nil];
}

Тогда еслиВы нажимаете свою кнопку для присутствия SecondViewController, реализуете метод действия кнопки, как показано ниже.

- (void) targetMethod{
    [self dismissViewControllerAnimated:YES completion:nil];
    [_delegate go];
}

Сначала вы должны отклонить свой текущий ThirdViewController, затем делегат работает и представляет SecondViewController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...