我对如何正确执行某种操作存在疑问。
下图显示了一个UIViewController,但视图的第二部分是自定义UIView(具有配置文件pic,名称和Show View按钮的那个)。 使用以下代码分配子类UIView:
profileView = [[GPProfileView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 70)];
profileView.myTripGradientColor = YES;
[self.view addSubview:profileView];
问题当然是,UIView上的按钮无法显示任何视图,因为只有UIViewController可以将另一个ViewController推送到窗口(正确吗?)。
UIView在应用程序的多个位置使用,需要轻松添加,并在整个应用程序中具有相同的行为。
这很好用,直到我添加了按钮,我开始认为我犯了这个错误,并且必须有一个更好的方法(可能将UIView更改为其他东西?)。
我以为我应该可以致电:
self.superview
然后以某种方式获取ViewController,这样我就可以将另一个ViewController推送到视图层次结构中,但是没有。
有关如何正确执行此操作的任何建议和提示?
更新: 我不知道如何从按钮推送另一个UIViewController。
按下UIView中的按钮时,我该怎么办?
- (void) showViewButtonTouched:(UIButton*)sender {
GPProfileSocialFriendsViewController *friendsSettings = [[GPProfileSocialFriendsViewController alloc] init];
}
如何推送GPProfileSocialFriendsViewController?
答案 0 :(得分:1)
我认为您可以在UIViewController上的GPProfileView中创建弱引用。像这样:
@property (weak, nonatomic) UIViewController *rootController;
创建GPProfileView时,请指定rootController-property:
profileView = [[GPProfileView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 70)];
profileView.myTripGradientColor = YES;
profileView.rootController = self; // if view created in view controller
[self.view addSubview:profileView];
并执行按钮选择器:
self.rootController push... // or pop
可能这不正确,但您可以尝试
答案 1 :(得分:1)
您的- (void) showViewButtonTouched:(UIButton*)sender
方法应该在您的控制器中,并且可能更好地命名为- (void) showView:(UIButton*)sender
或- (void) showProfile:(UIButton*)sender
,因此它清楚地表明它的作用(而不是您如何到达)。
管理从一个州到另一个州的过渡不是视图的责任。如果您将方法移动到控制器,问题就不再存在(如果您没有这样的导航控制器,您可以轻松访问self.navigationController
或直接推送:
[self presentViewController:vcThatNeedsToBePushed animated:YES completion:nil];
答案 2 :(得分:0)
按下按钮时,您可以让视图控制器按下下一个视图控制器。视图控制器可以在按钮上添加目标/操作,以便在内部触摸事件中调用视图控制器中的操作方法。