iOS如何控制UIContainer View显示并消失?

时间:2015-03-03 02:22:24

标签: ios objective-c segue uicontainerview

我有一个UIViewController和一个UIContainer视图。

我想模拟UIAlertView效果,但我不知道如何构建容器视图节目并隐藏这个好方法。

我已将UITableView放在UIContainer视图中,我使用委托将所选项目发送到UIViewControllerParentViewController)并显示在标签中。(segue)名称为alertSegue

ParentViewController中有一个显示按钮,我需要点击所选项目,它会关闭(隐藏/解除?)UIContainer视图。

现在UIContainer查看默认设置已隐藏,故事情节屏幕截图如下:

enter image description here

我的 ParentViewController.h

 @interface ViewController : UIViewController<ContainerViewBLETableDelegate>

 @property (weak, nonatomic) IBOutlet UIButton *btn;
 - (IBAction)btnAction:(id)sender;
 @property (weak, nonatomic) IBOutlet UILabel *lb;
 @property (weak, nonatomic) IBOutlet UIView *containerView;

 -(IBAction)unwindSegue:(UIStoryboardSegue *)segue;

 @end

.m文件:

 - (void)viewDidLoad {
     [super viewDidLoad];
 }

 - (IBAction)btnAction:(id)sender {
     _containerView.hidden = NO;

 }

 -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
     if( [segue.identifier isEqualToString:@"alertSegue"])
     {
         ContainerViewBLETable *vc = segue.destinationViewController;
         vc.delegate = self;
     }
 }

 -(void) ContainerViewBLETable:(ContainerViewBLETable *)vc      andSelectedDone:(NSString *)selectedStr
 {
     self.lb.text = selectedStr;
     vc.view.hidden = YES;
 }

 -(IBAction)unwindSegue:(UIStoryboardSegue *)segue
 {
 }

Container ViewController .h:

 @class ContainerViewBLETable;
 @protocol ContainerViewBLETableDelegate <NSObject>

 -(void) ContainerViewBLETable:(ContainerViewBLETable*)vc andSelectedDone:(NSString*)selectedStr;

 @end

 @interface ContainerViewBLETable :      UIViewController<UITableViewDataSource,UITableViewDelegate>

 @property(nonatomic,assign) id<ContainerViewBLETableDelegate>delegate;

 @property (weak, nonatomic) IBOutlet UITableView *tableVW;

 @end

UIContainerView .m部分:

 .....
 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
    [self.delegate ContainerViewBLETable:self andSelectedDone:[NSString stringWithFormat:@"%ld",indexPath.row]];
 }
 .....

虽然此代码可以将值传递给UIViewControllerParentViewController),但隐藏了UIContainer视图,但是当我再次单击“显示”按钮时,它没有任何效果(我觉得容器视图重叠会导致触摸失效)。

(顺便说一下,我试过了

 [self.parentViewController dismissViewControllerAnimated:YES completion:nil];

它不起作用)

问题:

如何隐藏容器视图使用委托并且可以再次触摸show button show container?

控制UIContainer视图的好方法是在ParentViewControllerUIContainerView中显示和消失?

我非常感谢大家,你可以帮助我,而不是更好。

1 个答案:

答案 0 :(得分:0)

containerViewshow button位于不同的viewControllers中。所以你不能只是隐藏它。实现目标的简单方法是在containerView中选择单元格,显示ParentViewControllerContainerViewController中的视图将自动关闭。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   [self.delegate ContainerViewBLETable:self andSelectedDone:[NSString stringWithFormat:@"%ld",indexPath.row]];
   ParentViewController *vc = [[self storyboard] instantiateViewControllerWithIdentifier:@"ParentViewController"];
   [self presentViewController:vc animated:YES completion:nil];
}

要显示容器,您只需关闭呈现的ParentViewController即可。 1.

- (IBAction)btnAction:(id)sender 
{
   [self.presentingViewController dismissModalViewControllerAnimated:YES];
}

或者    2.设置segue以解除viewController并使用prepareForSegue for delegate与其他viewController进行通信。

删除 vc.view.hidden = YES您已实施的代理

 -(void) ContainerViewBLETable:(ContainerViewBLETable *)vc andSelectedDone:(NSString *)selectedStr.