我有一个关于子类/usr/local/rvm/rubies/ruby-2.2.2/bin/ruby -r ./siteconf20150523-10092-2alrq5.rb extconf.rb --with-sqlite3-dir=/opt/local
的基本问题,但似乎无法在这里找到答案。我的应用有UIViewControllers
,我计划有几个视图(按顺序)。我的第一个UINavigationViewController
是自定义ViewController
ViewController
,UITableView
和DatePicker
视图等。
我想对所有后续视图使用相同的UIPickerController
(我猜一个子类?)。我想使用我在故事板中构建的相同布局。目前我的代码的布局是这样的,在ViewController
中,我从plist读取一个数组,并填充表和内容的其余部分。
您可以想象,我正在尝试避免复制粘贴,重复代码以及同时更改所有视图的简便方法。
我知道这应该是微不足道的,但我无法弄清楚我需要做出哪些改变。另外,我应该用xib创建viewDidLoad
吗?有没有办法将我的ViewController
拖到Xcode右侧显示的列表中?
答案 0 :(得分:1)
我认为你应该创建一个基础'视图控制器将收集所有重复的方法和属性。它将继承自UIViewControll,但所有其他控制器将继承自base。
相同的视图你可以在故事板中复制粘贴并连接基类中的插座,但是如果你需要改变一些东西就会出现问题..所以我建议你以编程方式创建它(我认为xibs已经是过去),或将其替换为另一个小视图控制器,然后使用视图控制器的容器来加载它。
如果你有一些重复但不在每个控制器中的东西,你可以在基类中创建自己的选项,如下所示:
typedef NS_OPTIONS(NSUInteger, BaseOptions) {
BaseOptionsNone = 0,
BaseOptionsTableView = 1 << 0,
BaseOptionsDatePicker = 1 << 1,
BaseOptionsSomethingElse = 1 << 2
};
@interface BaseViewController : UIViewController
@property (nonatomic) BaseOptions options;
@end
@implementation BaseViewController
- (void)setOptions:(BaseOptions)options {
_options = options;
if (self.options & BaseOptionsTableView) {
// add table view
}
if (self.options & BaseOptionsSomethingElse) {
// another staff
}
}
@end
然后将选项设置为子类:
@interface CustomViewController : BaseViewController
@end
@implementation CustomViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.options = BaseOptionsTableView | BaseOptionsSomethingElse;
}
@end
玩得开心:)
答案 1 :(得分:0)
在我看来,您可以创建一个viewController作为根视图控制器,您可以在其中实现公共视图,操作等。然后,创建rootViewController的其他viewController子类。
在rootViewController中,您可以编写一些常用代码,包含或不包含xib。这都是你的家属。这是一个简单的例子:
//Your RootViewController.
class rootViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button:UIButton = UIButton(frame: CGRectMake(10, 10, 200, 90))
button.backgroundColor = UIColor.redColor()
button.addTarget(self, action: "testButton:", forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(button)
}
func testButton(button:UIButton) {
// Some Common Code. or just keep blank.
println("parents")
}
}
// Your ChildrenViewController.
class childrenViewController: rootViewController {
override func testButton(button:UIButton) {
super.testButton(button)
// Some code only for this children view controller.
println("children")
}
}
因为childrenViewController是rootViewController的子类,所以rootViewController的所有函数都对它有效。所以childrenViewController会自动在框架(10,10,200,90)中显示一个redButton。如果你按下按钮,这将打印“父母”和“孩子”。
希望它可以帮助你。