Быстрый диалог внутри фрейма

Я пытаюсь использовать QuickDialog для приложения iOS 5 для iPad, в котором используются раскадровки, но я думаю, что этот вопрос широко применим и к UITableViewController.

Насколько я понимаю, когда я инициализирую QRootElement, табличное представление, которое создает QDC, заменит представление моего класса, что сделает неэффективным все, что я настраиваю в раскадровке IB. Я хотел бы иметь возможность разрабатывать пользовательский интерфейс в IB и отображать таблицу QD в виде рамки, а не занимать весь экран.

Я думаю, что решение состоит в том, чтобы настроить табличное представление QuickDialog как подпредставление моего класса на основе UIView. Это верно? Каков наилучший способ добиться этого? Должен ли я переписать корневой инициализатор в моем пользовательском контроллере представления, который наследуется от QDC, или есть другой способ, возможно, что-то вроде используемого подхода здесь?

Спасибо!


person lucianf    schedule 28.05.2012    source источник


Ответы (1)


Я бы рекомендовал вам наследовать QuickDialogViewController в качестве основного контроллера. QDViewController наследуется непосредственно от UIViewController (вместо UITableViewController), поэтому довольно легко просто перемещать табличное представление и добавлять вокруг него элементы управления.

Если вы действительно хотите создать все из Interface Builder, ваше табличное представление должно будет наследоваться от QuickdialogTableView, и вам придется самостоятельно предоставить делегата и источник данных. Посмотрите на QDViewController для этого, так как вам придется писать почти такой же код.

person Eduardo Scoz    schedule 28.05.2012
comment
Э-э, вы тоже упомянули QDViewController в своем ответе на git issue 68, но такого класса нет, вы действительно имеете в виду QuickDialogController? - person lucianf; 28.05.2012
comment
Хорошо, спасибо. А теперь, не могли бы вы немного расширить историю наследства? Я совсем новичок в этом, поэтому я не мог следить за этим полностью. Мой VC наследуется от QDC; а в QDC создание представления (self.view=self.qdtview) происходит в loadView. Но для того, чтобы мое представление на основе раскадровки отображалось правильно, loadView не должен быть переопределен (иначе мне пришлось бы выделить self.view как пустой объект, и я потерял бы все объекты, назначенные в Interface Builder). Как я могу переопределить в своем vc, чтобы сохранить представление, созданное из IB, и добавить только qtview в качестве подпредставления? - person lucianf; 28.05.2012
comment
Хм, я думаю, что мне нужно в моем VC, это отменить переопределение loadView, чтобы переопределение в QDC больше не выполнялось, а затем создать subView в другом методе, который я могу переопределить (возможно, initWithCoder?). Это верно? Если да, то как я могу отменить переопределение метода или как-то вызвать суперкласс [super loadView]? - person lucianf; 28.05.2012
comment
Если честно, мне не очень нравятся раскадровки или IB. Создать пользовательский интерфейс в коде так просто, что играть с перетаскиванием — пустая трата времени. - person Eduardo Scoz; 28.05.2012
comment
Я не думаю, что раскадровка вызывает loadView, она просто реализует initWithCoder/initWithNib (не помню правильное имя). Если вы просто переопределите loadView и перепишете его, используя уже существующий tableView, все должно работать правильно. Но я этого не делал, так что удачи :) - person Eduardo Scoz; 28.05.2012
comment
Спасибо, Эдуардо, в конце концов я прокомментировал loadView в QD и написал свою собственную перегрузку, которая делает то же самое, но поместив quickDialogTableView в качестве подпредставления, а не заменив self.view. - person lucianf; 01.06.2012
comment
@lucianf вам не нужно комментировать loadView, просто переопределите его в своем коде и не вызывайте [super loadView]. Я также делаю это, когда мне нужно разместить больше элементов управления на одном экране. Рад, что это сработало для вас. - person Eduardo Scoz; 01.06.2012