2015-05-23 4 views
0

У меня есть основной вопрос о подклассе UIViewControllers, но он не может найти ответ нигде здесь. Мое приложение имеет UINavigationViewController, и я планирую иметь несколько видов (последовательно). Мой первый ViewController обычай ViewController с UITableView, DatePicker и UIPickerController вид и т.д.Создание подкласса UIViewController

Я хотел бы использовать те же ViewController (я предполагаю, что подкласс?) Для всех последующих представлений. Я хотел бы использовать тот же макет, который я создаю в раскадровке. В настоящее время мой код выложен таким образом, что в viewDidLoad я прочитал массив из plist и заполняет остальную часть таблицы и содержимого.

Как вы можете себе представить, я стараюсь избегать копирования, дублирования кода и простого способа внесения изменений во все виды одновременно.

Я знаю, что это должно быть довольно тривиально, но я не могу понять, какие изменения мне нужно сделать. Также, должен ли я создать ViewController с xib? и есть ли способ перетащить мой CustomViewController в список, который появляется с правой стороны в Xcode?

ответ

1

Я думаю, вам нужно создать «базовый» контроллер вида, который будет собирать все повторяющиеся методы и свойства. Он будет наследовать от UIViewControll, но все остальные контроллеры наследуют от базы.

То же мнение, что вы можете скопировать-вставить в раскадровку и подключиться к розеткам в базовом классе, но если вам нужно что-то изменить, у вас возникнут проблемы. Поэтому я рекомендую вам его создать программно (я думаю, xibs уже прошлое) или заменить его на другой небольшой контроллер представления, а затем использовать контейнер контроллеров представления для его загрузки. enter image description here

Если у вас есть некоторые вещи, которые повторяют, но не в каждом контроллере, вы можете создавать свои собственные параметры в базовом классе, как это:

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 

Иметь удовольствие :)

0

на мой взгляд, вы можете создать ViewController как корневой ViewController, в котором вы можете реали общее представление, действие и т. д. А затем создайте другой подкласс класса 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 будет для него справедливо. Таким образом, childViewController будет автоматически отображать redButton в кадре (10, 10, 200, 90). И если вы нажмете кнопку, это напечатает «родители» и «дети».

надеюсь, что это может вам помочь.

 Смежные вопросы

  • Нет связанных вопросов^_^