我正在为拥有自己的子视图而苦苦挣扎UIViewControllers.我有一个UIViewController视图(浅粉色)和两个按钮toolbar.我希望在按下第一个按钮时显示蓝色视图,按下第二个按钮时显示的黄色视图.如果我只是想显示一个视图,应该很容易.但蓝色视图将包含一个表,因此它需要它自己的控制器.那是我的第一课.我从这个SO问题开始,我知道我需要一个控制器用于表.
所以,我要支持并采取一些婴儿步骤.下面是我的Utility ViewController(主视图控制器)和另外两个控制器(蓝色和黄色)的简单起点图片.想象一下,当ViewController首次显示Utility (主视图)时,将显示粉红色视图所在的蓝色(默认)视图.用户可以单击两个按钮来回移动,粉红色视图将永远不会显示.我只想将蓝色视图移到粉红色视图的位置,将黄色视图移到粉红色视图所在的位置.我希望这是有道理的.

我正在尝试使用addChildViewController.从我所看到的,有两种方法可以做到这一点:容器视图storyboard或addChildViewController编程.我想以编程方式进行.我不想使用NavigationController或Tab栏.我只想添加控制器,并在按下相关按钮时将正确的视图推入粉红色视图.
下面是我到目前为止的代码.我想要做的就是显示粉红色视图所在的蓝色视图.从我所看到的,我应该能够addChildViewController和addSubView.这段代码不适合我.我的困惑是让我变得更好.有人可以帮我看到粉红色视图所在的蓝色视图吗?
除了在viewDidLoad中显示蓝色视图外,此代码不用于执行任何操作.
IDUtilityViewController.h
#import <UIKit/UIKit.h>
@interface IDUtilityViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIView *utilityView;
@end
Run Code Online (Sandbox Code Playgroud)
IDUtilityViewController.m
#import "IDUtilityViewController.h"
#import "IDAboutViewController.h"
@interface IDUtilityViewController ()
@property (nonatomic, strong) IDAboutViewController *aboutVC;
@end
@implementation IDUtilityViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.aboutVC = [[IDAboutViewController alloc]initWithNibName:@"AboutVC" bundle:nil];
[self addChildViewController:self.aboutVC];
[self.aboutVC didMoveToParentViewController:self];
[self.utilityView addSubview:self.aboutVC.aboutView];
}
@end
Run Code Online (Sandbox Code Playgroud)
- - - - …
我完全重新制定了这个问题,因为我知道我原本偏离轨道但是让我无法解决问题.参考这张图片......

我想要在代码中创建或操作segue(以黄色突出显示),以便主视图是MFMasterViewController(以红色突出显示)的多个子类中的任何一个.
做这个时使用笔尖我可以创建一个笔尖,SharedNib.xib和设置类的MFMasterViewController,然后创建我的子类,比方说MFMasterViewControllerSubclassA,MFMasterViewControllerSubclassB等和然后实例化我想要使用哪个子...
MFMasterViewControllerSubclassA *controller = [[MFMasterViewControllerSubclassA alloc] initWithNibName:@"SharedNib" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
要么...
MFMasterViewControllerSubclassB *controller = [[MFMasterViewControllerSubclassB alloc] initWithNibName:@"SharedNib" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
等等
关于如何使用故事板来解决这个问题的任何线索?
在我的情况下,想要这样做的原因是我的所有子类都是相同的tableview和数据,但排序方式不同,并且对于写入cels详细文本的内容有所不同.我怀疑这是一种并不罕见的模式.
干杯和TIA,佩德罗:)
我需要有一些看起来非常相似但有不同行为的UIViewControllers,所以我想我会用xib制作一个通用的UIViewController子类,然后在我需要的时候将它子类化,对于那些看起来相似的不同的UIViewController.
我正在努力实现以下目标
UIViewController子类(有一个xib文件关联) - >并且能够将它子类化为我想要的次数(没有为子节点添加额外的xib文件)
到目前为止我做了什么:
xib文件表示具有多个UI元素的UIViewController.
我已将所有连接设置为文件所有者@ xib文件.
带有xib的子类包含这个@ init方法:
self = [[[NSBundle mainBundle] loadNibNamed:
[NSString stringWithFormat:@"ParentViewController"]
owner:self options:nil] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
当我将xib中的View属性连接到文件的所有者时,我得到一个异常,说我不能将View属性连接到父UIViewControllers和子UIViewControllers.
但是当View属性仅连接到与xib相关联的UIViewController时,我得到一个空白屏幕,并且该插座不可断开.
如果我实例化父vc而不是子进程,一切正常,如果一切都是以编程方式完成而不是使用xib,那么一切正常.
因为这个UIViewController显示了很多UI元素,所以我试图用xib设置它.
我真的不明白如何让孩子ViewControllers看起来像父的xib文件,并有自己的添加和行为.
我有一个标签栏控制器和一堆相同的标签.每个选项卡的功能都不同,但UI都是相同的.在故事板中,我设计了一个选项卡的流和UI,并将其设置为基类.然后,当我创建选项卡时,我尝试对它们进行类型转换,然后将它们添加到选项卡栏,但它不起作用.
在故事板中,View Controller识别"TabView"具有自定义类"TabColor"
TabRed *red = (TabRed *)[storyboard instantiateViewControllerWithIdentifier:@"TabView"];
TabBlue *blue = (TabBlue *)[storyboard instantiateViewControllerWithIdentifier:@"TabView"];
Run Code Online (Sandbox Code Playgroud)
然而,TabColor中的loadView方法被调用,而不是TabRed/TabBlue.
此外,如果我nslog它的结果是一个TabColor对象:
NSLog(@"%@", red)
Run Code Online (Sandbox Code Playgroud)
预期:TabRed
实际:TabColor
我发现当我初始化一个新的子类时,我得到了返回的父类的对象。
家长:
- (id)init
{
self = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"EditController"];
return self;
}
Run Code Online (Sandbox Code Playgroud)
孩子:
- (id)init
{
NSLog(@"New child");
self = [super init];
return self;
}
Run Code Online (Sandbox Code Playgroud)
如果我分配并初始化一个子级,它会显示New child但会返回父级类的对象。调用仅在子级中声明的方法会导致崩溃。
有人可以解释一下初始化过程是如何工作的,以及如何创建子对象吗?
我在我的故事板中设置了这个UIViewController,包含了我需要的所有插座,视图和约束.完善.让我们调用这个WatchStateController,它将作为一个抽象的父类.
然后我有了WatchStateController的这个子类,叫做WatchStateTimeController,它将具有我需要的特定应用程序状态的功能.
因为我试图在UIStoryboard中使用1视图控制器,我在将WatchStateTimeController实例化为类型WatchStateTimeController时遇到了一些问题 - 它实例化为WatchStateController.
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
WatchStateTimeController *timeController = (WatchStateTimeController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"WatchStateController"];
Run Code Online (Sandbox Code Playgroud)
这是因为故事板的Identity Inspector中的"Class"字段设置为"WatchStateController".所以问题是,我如何仅在运行时更改Identity Inspector中设置的类名?

注意:忽略我为什么要这样做并专注于如何做到这一点.如果你真的必须知道原因,你可以阅读战略设计模式.
ios ×4
objective-c ×3
uistoryboard ×2
iphone ×1
segue ×1
storyboard ×1
subclass ×1
uitableview ×1
xcode ×1
xcode6 ×1
xib ×1