iOS 如何控制 UIContainer View 的显示和消失?
Posted
技术标签:
【中文标题】iOS 如何控制 UIContainer View 的显示和消失?【英文标题】:iOS How to control the UIContainer View show and disappear? 【发布时间】:2015-03-03 02:22:23 【问题描述】:我有一个UIViewController
和一个UIContainer
视图。
我想模拟UIAlertView
的效果,但是不知道如何构建Container View 显示和隐藏的好方法。
我已将UITableView
放入我的UIContainer
视图中,我使用委托将所选项目发送到UIViewController
(ParentViewController
) 并显示在标签中。(与alertSegue
转义名称)
ParentViewController
中有一个显示按钮,我需要单击所选项目,它将关闭(隐藏/关闭?)UIContainer
视图。
现在UIContainer
视图默认是隐藏的,故事板截图如下:
我的 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
容器视图控制器.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]];
.....
虽然这段代码可以将值传递给UIViewController
(ParentViewController
),并且UIContainer
视图被隐藏了,但是当我再次点击显示按钮时,它没有任何效果(我感觉容器视图是重叠导致触摸失效)。
(顺便说一句,我试过了
[self.parentViewController dismissViewControllerAnimated:YES completion:nil];
没有效果)
问题:
如何使用委托隐藏容器视图并且可以再次触摸显示按钮显示容器?
还有什么好方法可以控制UIContainer
视图在ParentViewController
和UIContainerView
中显示和消失?
我真的很感谢大家,你们可以帮助我,而且比更好。
【问题讨论】:
所以当你在ContainerViewBLETable
中选择containerView
中的单元格时,它会推送到ParentViewController
,其中有一个标签显示show
?
当我在 containerView 中选择单元格时,我将隐藏 ContainerView,它会使用 delegate.the label 将值传递给 ParentViewController 在 parentviewcontroller 中显示。然后当我点击“显示按钮”时,我需要再次显示容器视图。
【参考方案1】:
containerView
和 show button
位于不同的视图控制器中。所以你不能只是隐藏它。实现它的简单方法是当您选择containerView
中的单元格,呈现ParentViewController
,ContainerViewController
中的视图将自动关闭。
- (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作为delegate与其他viewController通信。
还 REMOVE vc.view.hidden = YES
在您已实施的委托中
-(void) ContainerViewBLETable:(ContainerViewBLETable *)vc andSelectedDone:(NSString *)selectedStr.
【讨论】:
我取消了隐藏的容器视图。但最初,容器视图是显示的,所以我添加了 [self.presentingViewControllerdismissViewControllerAnimated:NO completion:nil];在viewdidload中,情况还是一样。 parenetview 总是显示包括容器视图。如果可以的话,我已经在 github 上发布了这个项目。你可以检查一下效果。 :(github.com/dickfalaDeveloper/popalertShow非常感谢你。 是的,当单击按钮显示容器视图时,单击容器表单元格隐藏容器视图。这是我的目的。谢谢。 您已将 segue 嵌入到 containerViewBE 表,而不是 containerViewBE 控制器。你需要连接show button
和containerViewController
之间的segue。我误解了你对 vc 层次结构的感觉。 didSelectRowAtIndexPath
方法应该调用 dismiss
而不是 present
。对不起,我的错。
对不起~问题没有解决。我需要模拟 UIAlertView 效果,所以我使用容器视图。你能不能试着改变我的测试项目代码来达到效果?我混淆了更多时间:(
@dickfala 你说的 UIAlertView 效果是什么?以上是关于iOS 如何控制 UIContainer View 的显示和消失?的主要内容,如果未能解决你的问题,请参考以下文章
IOS SDK: Container view with 3 UI View area如何?