Добавьте ChildViewController и выполните действие кнопки в ChildViewController.

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

Пожалуйста, направляйте. Заранее спасибо.

Примечание. ChildViewController содержит настраиваемое всплывающее окно, не использующее UIAlertController.

Обновление: код в MainViewController

-(void)showAlertView
{   
    customAlertView = [[CustomAlertController alloc] init];
    [self displayContentController:customAlertView :msg :cancel :delete];
}

- (void) displayContentController: (UIViewController*) content: (NSString *) alertMsg: (NSString *) btnOneTitle: (NSString *) btnTwoTitle
{
[self addChildViewController:content];      // 1
content.view.bounds = self.view.bounds;     //2
content.strAlertMsg = alertMsg;
[content.view setFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, self.view.frame.size.height)];
[self.view addSubview:content.view];
[content didMoveToParentViewController:self];          // 3
}

// ChildViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

self.lblMsg.text = strAlertMsg;
[self.btnCancel setTitle:strBtnTitle1 forState:UIControlStateNormal];
[self.btnDelete setTitle:strBtnTitle2 forState:UIControlStateNormal];

}

Вопрос: Как передать данные от родительского к дочернему контроллеру представления


person iPhone Programmatically    schedule 03.01.2018    source источник
comment
Что вы сделали до сих пор ??   -  person dahiya_boy    schedule 03.01.2018
comment
Если контроллер дочернего представления встроен в контроллер основного представления, как вы можете его отключить? Пожалуйста, объясните ваше требование немного яснее и добавьте немного кода, если можете.   -  person PGDev    schedule 03.01.2018
comment
Код @dahiya_boy обновлен   -  person iPhone Programmatically    schedule 03.01.2018
comment
@iPhoneProgrammatically Нет необходимости в hideContentController bcz, он также закрывает дочерний вид, но это уже делается с помощью кнопки в дочернем VC. Код кажется идеальным, с какой проблемой вы столкнулись?   -  person dahiya_boy    schedule 03.01.2018
comment
Ничего, просто решил, разместил сам ответ в вопросе. Но одна проблема, с которой я сталкиваюсь, заключается в том, как передать значения дочернему контроллеру представления в виде строки из родительского представления.   -  person iPhone Programmatically    schedule 03.01.2018


Ответы (3)


Создайте пользовательский XIB, в котором вы реализуете свое всплывающее окно.

person Khawar Islam    schedule 03.01.2018
comment
сделал то же самое, мой вопрос о действиях в дочернем представлении - person iPhone Programmatically; 03.01.2018
comment
Мужчина. Сделайте класс с XIB. Создайте действие в Xib и напишите код отклонения контроллера просмотра - person Khawar Islam; 03.01.2018

Лучше, чем Child ViewController, вы можете использовать для него другой отдельный контроллер представления.

1) Сначала создайте один контроллер представления, например «ShowPopVC».

2) Дефилируйте typealias в соответствии с потребностями в вашем контроллере представления.

typealias iSNeed = (Bool) -> Void
private var setResponsehandler: iSNeed?

3) добавьте этот метод в этот класс и замените его именем класса

class func show(in selectedViewController: UIViewController,handler: @escaping iSNeed) {
    let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ShowPopVC") as! ShowPopVC
    controller.modalPresentationStyle = .overCurrentContext
    selectedViewController.present(controller, animated: false, completion: {
        controller.setResponsehandler = handler
    })
}

4) Добавьте действия кнопки и установите возвращаемое значение

@IBAction func buttonYesNoClicked(_ sender: UIButton) {
    self.setResponsehandler!((sender.tag == 1) ? true:false)
    self.dismiss(animated: false, completion: nil)
}

-> и, наконец, вы можете открыть это представление из любого места вашего приложения, используя этот простой метод

@IBAction func buttonPopClicked(_ sender: UIButton) {
    ShowPopVC.show(in: self) { (iSNeed) in
        print(iSNeed)
    }
} 
person Tarun Gosai    schedule 03.01.2018

Создайте блок с именем selfDismissBlock в файле .h вашего класса дочернего контроллера.

typedef void (^dismissBlock)(void);

@property (copy, nonatomic) dismissBlock selfDismissBlock;

После нажатия кнопки закрытия в классе вашего дочернего контроллера вызовите блок.

self.selfDismissBlock();

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

for (UIViewController *childController in self.childViewControllers)
{
   if ([childController isKindOfClass:[YourChildController class]])
   {
     return;
   }
}

[self addChildViewController:self.yourChildControllerObj];
[self.yourChildControllerObj didMoveToParentViewController:self];

UIViewController * __weak weakViewController = self.yourChildControllerObj;
self.yourChildControllerObj.selfDismissBlock = ^{
       [weakViewController willMoveToParentViewController:nil];
       [weakViewController removeFromParentViewController];
       [weakViewController.view removeFromSuperview];
    };
person Dinu    schedule 03.01.2018