相关疑难解决方法(0)

如何在Objective-C中添加具有自己的UIViewController的子视图?

我正在为拥有自己的子视图而苦苦挣扎UIViewControllers.我有一个UIViewController视图(浅粉色)和两个按钮toolbar.我希望在按下第一个按钮时显示蓝色视图,按下第二个按钮时显示的黄色视图.如果我只是想显示一个视图,应该很容易.但蓝色视图将包含一个表,因此它需要它自己的控制器.那是我的第一课.我从这个SO问题开始,我知道我需要一个控制器用于表.

所以,我要支持并采取一些婴儿步骤.下面是我的Utility ViewController(主视图控制器)和另外两个控制器(蓝色和黄色)的简单起点图片.想象一下,当ViewController首次显示Utility (主视图)时,将显示粉红色视图所在的蓝色(默认)视图.用户可以单击两个按钮来回移动,粉红色视图将永远不会显示.我只想将蓝色视图移到粉红色视图的位置,将黄色视图移到粉红色视图所在的位置.我希望这是有道理的.

简单的故事板图像

我正在尝试使用addChildViewController.从我所看到的,有两种方法可以做到这一点:容器视图storyboardaddChildViewController编程.我想以编程方式进行.我不想使用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)

- - - - …

objective-c uitableview uiviewcontroller uicontainerview

53
推荐指数
2
解决办法
3万
查看次数

如何在多个UIViewControllers之间共享一个故事板场景

我完全重新制定了这个问题,因为我知道我原本偏离轨道但是让我无法解决问题.参考这张图片...... 故事板图

我想要在代码中创建或操作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,佩德罗:)

uiviewcontroller ios uistoryboard segue uistoryboardsegue

15
推荐指数
1
解决办法
4747
查看次数

子类化具有xib的子类UIViewController

我需要有一些看起来非常相似但有不同行为的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文件,并有自己的添加和行为.

subclass xib uiviewcontroller ios xcode6

7
推荐指数
2
解决办法
4003
查看次数

在实例化时使用代码更改故事板中的自定义类

我有一个标签栏控制器和一堆相同的标签.每个选项卡的功能都不同,但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

xcode objective-c ios

6
推荐指数
1
解决办法
3861
查看次数

我可以对从 Storyboard 实例化的 ViewController 进行子类化吗?

我发现当我初始化一个新的子类时,我得到了返回的父类的对象。

家长:

- (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但会返回父级类的对象。调用仅在子级中声明的方法会导致崩溃。

有人可以解释一下初始化过程是如何工作的,以及如何创建子对象吗?

objective-c uistoryboard

5
推荐指数
1
解决办法
1194
查看次数

如何在运行时更改UIStoryboard中的UIViewController类名称

我在我的故事板中设置了这个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中设置的类名?

身份检查员

注意:忽略我为什么要这样做并专注于如何做到这一点.如果你真的必须知道原因,你可以阅读战略设计模式.

iphone storyboard uiviewcontroller ios

3
推荐指数
2
解决办法
2306
查看次数