我有一个应用程序,其中菜单栏是一个UIScrollView,由我在UIViewController上添加的UIButtons组成。 我想更改按下UIScrollView上的按钮时显示的UIViewController。 但是从UIScrollView显然我无法打电话:
[self.view presentViewController:myView animated:YES completion:nil];
我知道处理这种视图切换的最佳方法是什么。
答案 0 :(得分:0)
从应用的rootView中显示它
[[[[[UIApplication sharedApplication]delegate]window]rootViewController] presentViewController:<#your view#> animated:<#a bool#> completion:<#any handler#>];
答案 1 :(得分:0)
试试这个 __weak UIViewController viewCSelf =(UIViewController )[self.superview nextResponder];
if([viewCSelf isKindOfClass:[UIViewController class]]){
[viewCSelf presentViewController:animated:YES completion:nil];
}
答案 2 :(得分:0)
当有基于sideMenu的应用程序时,我一直看到的基本方法是,必须有一个 ContainerViewController 来保存菜单&amp;休息所有其他 viewControllers 以少数方式显示在容器上 -
现在您可能需要重新考虑应用程序设计,以及如何继续。
正如上面提到的那样推动&amp;对于模型,您只能在 ContainerViewController 上进行菜单访问。还有另一种方法可以将 &#34;菜单添加为ApplicationWindow&#34; 的子视图。
希望这有助于您决定采取哪种方式。
答案 3 :(得分:0)
最常规的方法是使用delegation
。
无论如何,你的scrollView位于视图上,该视图具有控制器,您可以以任何方式呈现另一个控制器(当前模态,推送到导航控制器的堆栈,添加为子视图等)
如何构建代码取决于哪个对象接收按钮操作。让我们假设它是一个包含带有按钮的滚动视图的视图:
// MenuBarView.h
@class MenuBarView;
@protocol MenuBarViewDelegate <NSObject>
- (void)menuBarView:(MenuBarView *)menuBar didSelectMenuItemAtIndex:(NSUInteger)index;
@end
@interface MenuBarView
@property (weak) id<MenuBarViewDelegate> delegate;
@end
// MenuBarView.m
...
- (void)menuButtonAction:(UIButton *)sender
{
[_delegate menuBarView:self
didSelectMenuItemAtIndex:sender.tag] //you can use button's tag as row index
}
...
现在在viewController中采用MenuBarViewDelegate
协议,它拥有MenuBarView实例并且显示子视图控制器依赖于所选择的菜单索引