有沒有辦法改變segue要調用哪個控制器來準備segue?我試圖做到這一點,當一個嵌入式segue改變分段控制。謝謝!segue change destinationViewController
3
A
回答
4
如果您想切換哪個控制器是嵌入式控制器,那麼我認爲您需要使用Apple使用的自定義容器視圖控制器範例。我下面的代碼來自一個小測試應用程序。這是使用單個控制器模板設置的,然後將容器視圖添加到該控制器(稱爲ViewController),並對主視圖進行分段控制。然後我添加了一個斷開的視圖控制器,將其大小更改爲空閒形式,然後將其視圖大小調整爲與嵌入式控制器的視圖大小相同。這裏是ViewController.h代碼:
@interface ViewController : UIViewController
@property (weak,nonatomic) IBOutlet UIView *container;
@property (strong,nonatomic) UIViewController *initialVC;
@property (strong,nonatomic) UIViewController *substituteVC;
@property (strong,nonatomic) UIViewController *currentVC;
@end
這是我在ViewController.m:
- (void)viewDidLoad {
[super viewDidLoad];
self.initialVC = self.childViewControllers.lastObject;
self.substituteVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Substitute"];
self.currentVC = self.initialVC;
}
-(IBAction)SwitchControllers:(UISegmentedControl *)sender {
switch (sender.selectedSegmentIndex) {
case 0:
if (self.currentVC == self.substituteVC) {
[self addChildViewController:self.initialVC];
self.initialVC.view.frame = self.container.bounds;
[self moveToNewController:self.initialVC];
}
break;
case 1:
if (self.currentVC == self.initialVC) {
[self addChildViewController:self.substituteVC];
self.substituteVC.view.frame = self.container.bounds;
[self moveToNewController:self.substituteVC];
}
break;
default:
break;
}
}
-(void)moveToNewController:(UIViewController *) newController {
[self.currentVC willMoveToParentViewController:nil];
[self transitionFromViewController:self.currentVC toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
completion:^(BOOL finished) {
[self.currentVC removeFromParentViewController];
[newController didMoveToParentViewController:self];
self.currentVC = newController;
}];
}
7
正如你可能已經注意到,segue的destinationViewController
是readonly
。你更好的策略是在擁有分段控件的視圖控制器(而不是視圖或控件)和你想要選擇的其他視圖控制器之間定義segues。根據選定的部分做出決定,並從控制器的代碼中調用performSegueWithIdentifier:sender:
,並使用與段匹配的標識符。
+0
感謝您的回覆。我仍然可以通過這種方式嵌入子視圖控制器嗎?我想嵌入一個,並在段更改時更改爲另一個。 –
相關問題
- 1. SEGUE destinationViewController未檢測destiation方法
- 2. DestinationViewController Segue公司和UINavigationController的迅速
- 3. PrepareforSegue不顯示destinationviewcontroller
- 4. iOS segue緩慢 - 即使在destinationViewController上沒有任何處理
- 5. performSegueWithIdentifier destinationViewController deallocs與ARC
- 6. UIStoryboardSegue sourceViewController上面的destinationViewController
- 7. 發送字符串到destinationViewController
- 8. prepareForSegue ** always **創建一個新的destinationViewController?
- 9. 發送細胞數據到destinationViewController與prepareForSegue
- 10. 如何從多個segue識別destinationVC上的segue標識符?
- 11. Segue公司右左過渡
- 12. 定製Segue公司與UIViewAnimationOptionTransitionCurlDown
- 13. 用segue傳遞UIImage
- 14. 識別傳入的segue
- 15. Swift 2.0自定義塞格:destinationViewController的navigationController屬性返回零
- 16. 如何以編程方式指定segue(不執行segue)?
- 17. 用推Segue更改項目標題Segue
- 18. Segue可選值無
- 19. 無法識別的選擇發送到destinationViewController
- 20. UITableView Segue
- 21. ios transitiondelegate與segue
- 22. .change()
- 23. 在自定義搜索引擎中使用destinationViewController按鈕
- 24. 通過Segue傳遞信息
- 25. SEGUE和EKEventViewController刷新
- 26. 我無法將數據uitableviewcell傳遞到destinationviewcontroller
- 27. Segue TableViewCell與UIButton
- 28. Segue被執行兩次
- 29. prepareForSegue適用於模態segue但不推推segue
- 30. 通過segue傳遞數據
你是不是想改變哪個控制器嵌入在容器視圖,或者是你試圖從一個嵌入式視圖控制器做不同的segues? – rdelmar
是的我試圖改變基於段選擇嵌入的控制器。感謝您的迴應。 –