Что значит делегировать Владельцу файла в моем xib-файле? - PullRequest
1 голос
/ 02 апреля 2012

Я считаю, что UIView объекты могут делегировать управление представлениям в iOS-программировании. Однако я подумал, что это уже обработано IBAction, связанным с IBOutlet, соответствующим UIView.

В таком случае, что означает перетаскивание синей линии (при нажатии Ctrl) из круга делегата UIView в моем xib для владельца файла?

Разве UIView уже не делегирует моему контроллеру представления через IBAction? Код, кажется, работает, если я не указываю ничего для моего UIView делегата.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

"Разве UIView уже не делегирует моему контроллеру представления через IBAction? Код, кажется, работает, если я ничего не указываю для моего UIView делегата".

Похоже, вы путаете идею механизма целевого действия с делегированием.Хотя в некотором смысле вы можете думать о target-action как о «делегировании», это будет только в самом общем смысле слова в том смысле, что именно target (обычно контроллер) обрабатывает и реализует действие (сообщение).Однако программист Какао, вероятно, воздержится от объяснения механизма целевого действия, используя это конкретное слово - делегирование - поскольку было бы слишком легко спутать его с фактическим Делегирование .

Когда вы«Подключить» кнопки и элементы управления в nib-файле для вызова методов IBAction в вашем объекте контроллера, это всего лишь механизм целевого действия в действии.Как вы видели, код работает, даже если вы «не указываете ничего для моего UIView делегата», поскольку target-action не включает делегирование (в какао-смысле этого слова).

Делегирование обычно используется как более простая альтернатива использованию подклассов для реализации желаемого поведения.Например, вместо того, чтобы создавать собственный настраиваемый подкласс UITableView, чтобы он знал, какие данные вы хотите отобразить, вы можете простоиспользуйте простой класс UITableView, установите его delegate в класс контроллера, и пусть класс контроллера реализует требуемые / желаемые назначенные методы делегата. Использование подклассов для достижения этой цели может стать сложным, поскольку при создании подкласса вам необходимоиметь полное представление о цепочке наследования и о том, как работают все суперклассы.

1 голос
/ 02 апреля 2012

Когда вы перетаскиваете, нажимая CNTRL из IBOutlet или IBAction в UILabel, UIButton или что-то еще, вы привязываете события или выходы к своему контроллеру.

Делегированный вид контроллера, который должен реализовывать определенные функциив зависимости от того, какой это тип делегата.Например, UIViewController, который реализует протокол UIViewDelegate, может реализовать

    -(void)viewDidLoad

YourApplicationDelegate, который реализует UIApplicationDelegate, должен реализовывать

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Так что делегат - это просто набор функций, которыеопределить поведение объекта, классы, которые его реализуют, могут изменить это поведение.

1 голос
/ 02 апреля 2012

Владелец файла - это просто причудливый способ замаскировать имя класса, на который XIB ссылается. Когда вы перетаскиваете выход делегата в свой класс, это эквивалент этой строки:

[self.myControl setDelegate:self];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...