[英]change Subview of superview through IBAction of Subview ios
我試圖在這里找到解決方案但無法找到,基本上我有一個交互式子視圖,我需要從子視圖中切換到一個新的交互式子視圖。 我可以在主視圖中使用 IBAction 輕松更改子視圖,但我一直未能從子視圖中更改視圖。 這是代碼......這應該使我想要完成的工作更加清晰。
MainViewController 的 in.h
@interface MainViewController : UIViewController {
IBOutlet OneViewController *oneviewController;
IBOutlet TwoViewController *twoViewController;
}
-(IBAction)goToView;
@property (nonatomic, retain) IBOutlet OneViewController *oneviewController;
@property (nonatomic, retain) IBOutlet TwoViewController *twoViewController;
@end
英寸
@implementation MainViewController
@synthesize oneviewController;
@synthesize twoViewController;
-(IBAction)goToView {
[self.view addSubview:twoViewController.view];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:oneviewController.view];
}
好的,這一切都很好,我可以使用 xib 加載兩個 ViewController,並且它們的所有按鈕都可以工作等等。..
但是當我嘗試...
OneViewController 的 in.m
#import "MainViewController"
...
[MainViewController.view addSubview:twoViewController.view]; ...
這不起作用,我嘗試了各種方法,通過將 twoViewController 添加到 oneViewController 的.h 中,但它崩潰了......我對這一切仍然很陌生,所以很可能我錯過了明顯的東西。 感謝幫助!!
我也在 OneViewController 的.m 中試過這個
但它仍然崩潰......雖然構建成功
MainViewController* mySuperView = (MainViewController*)self.view.superview; TwoViewController *twoViewController; [mySuperView.view addSubview:twoViewController.view];
這個動作是在錯誤的地方進行的。 如果您嘗試向 MainViewController 添加子視圖,您應該在 MainViewController.m 中處理它。 您正在調用:
[MainViewController.view addSubview:twoViewController.view];
但 MainViewController.view 是視圖的 static 實例。 如果您想保持原樣,並假設 OneViewController 已經是 MainViewController 上的子視圖,您應該執行以下操作:
UIView *main = [OneViewController.view superview]; [主addSubview:twoViewController.view];
不過,這非常危險,因為不能保證您對此視圖有超級視圖。 我只是在 MainViewController 中處理所有這些。 沒有 controller 應該有權將子視圖添加到另一個 controller,除非它具有 MainViewController 的實例。
以下代碼有效,但它給了我1個警告......
在我的子視圖中,OneViewController.m(在 IBAction 下)...
{for (UIView* next = [self.view superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
[(UIViewController*)nextResponder resetSubView];
}`
在我的 MainViewController.m
- (void) resetSubView { [self.view addSubview:twoViewController.view]; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.