Pull to refresh
14
0
Send message

Анонимные классы в Objective-C

Reading time6 min
Views6.5K
Даная статья является продолжением «Переопределение реализации метода. Вдохновленный Java'ой». В предыдущей заметке было предложено слишком уж кривое решение, оставлять в таком виде не хотелось и было принято волевое решение довести свое начинание до логического завершения и сделать все «как надо». Хотя вопрос нужности такого функционала в Objective-C до сих пор открыт.
Объяснение
Статья была опубликована вчера, но я нашел способ сделать еще более правильную реализацию, ага, поэтому и скрыл ее на время


Итак, продолжаем быть похожими на Java

Читать дальше →
Total votes 6: ↑3 and ↓30
Comments2

Переопределение реализации метода. Вдохновленный Java'ой

Reading time10 min
Views11K
Продолжение можно почитать тут habrahabr.ru/post/170265

Вступление


Изучая основы разработки под Android мне пришлось познакомится с таким замечательным языком, как Java. Читая очередной раздел гугловского GetStarted я наткнулся на такую конструкцию:

Button.OnClickListener mTakePicSOnClickListener = 
		new Button.OnClickListener() {
		@Override
		public void onClick(View v) {
			
		}
	};

Объявление представителя OnClickListener и переопределения у него метода onClick (поправьте меня Java программисты). Хм, подумал я, а круто бы эту фичу поиметь в Objective-C, а именно возможность переопределять реализацию метода у объекта(конкретного объекта, а не реализацию метода для всех объектов класса) да еще и через блоки в runtime (!) и забыл о этом всем… пока не оказался в полупустом автобусе в дождливую погоду. Времени было много и я решил поразмыслить над тем, что же тут можно сделать.
Зачем это нужно было? Изначально хотелось уметь делать так:

tableView1.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){
       NSLog(@"selected row %i", ip.row);
}]
tableView2.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){
       NSLog(@"selected row %i", ip.row);
}]

Обратите внимание, что предполагается изменение именно делегата и добавление/предопределение методов у него. А tableView остается оригинальным, без каких либо изменений.

Тем самым местом я чувствовал, что это вполне реализуемо благодаря богатому внутреннему миру Objective-C Runtime.
И да, то самое место меня не подвело.
Читать дальше →
Total votes 9: ↑7 and ↓2+5
Comments3

Определение ориентации Pinch жеста

Reading time4 min
Views2.9K

Краткое введение


В одном из проектов мне понадобилось определение ориентации жеста Pinch. Нужно это было для выборочного масштабирования объекта по оси. Т.е. если пальцы сдвигаются/раздвигаются вертикально, то и объект мы масштабируем только вертикально. К сожалению, стандартный распознаватель подобного жеста UIPinchGestureRecognizer не предоставляет такой информации. Просмотрев первую страницу результатов поиска в гугле я не наткнулся на готовое решение. «Ну что же, напишем сами. Так даже интересней :)» — подумал я и приступил к реализации своего пинча.
Читать дальше →
Total votes 27: ↑22 and ↓5+17
Comments4

Легким движением руки UITabBarController превращается в UISplitViewController

Reading time3 min
Views2K
Доброй ночи/утра/дня/вечера

Как видно из названия статьи я расскажу вам о том, как потратив минимум сил и времени, превратить iPhone`ский UITabBarController в iPad`овский “UISplitViewController”
Для этого нам понадобится: проект(под iPad) с предыдущего моего рассказа, xib файл(под iPhone) с UITabBarController'ом и класс-контроллер к нему. Первое у меня было. Что касается второго и третьего, то я быстро создал xib в Interface Builder'е и дал ему незамысловатое имя iPhoneTabBar.xib.


Читать дальше →
Total votes 11: ↑8 and ↓3+5
Comments6

Альтернатива UISplitViewController (отображение MasterView в книжной ориентации устройства)

Reading time5 min
Views1.3K
Как было замечено в статье “Всплывающие окна. Работа с UIPopoverController” в iPhone SDK 3.2 были добавлены новые элементы интерфейса: UIPopoverController и UISplitViewController. О первом из них уже довольно подробно рассказано на хабре. Я же хочу поговорить о UISplitViewController, верней о некой альтернативе.

“Зачем же нужна эта альтернатива?”, — спросите Вы, — “какова причина?”. Все дело в особенности поведения SplitView, вот выдержка из SDK: “Both view controllers are displayed in landscape orientations but only the detail view controller is displayed in portrait orientations”. Т.е. при книжной ориентации правая часть (MasterView) попросту прячется(см. рис. 1)


Рисунок 1 — SplitView в альбомной (а) и книжной (б) ориентации

Посмотрев на Основные настройки iPad мы увидим совсем другую картину: и в книжной и в альбомной ориентации левая часть (MasterView) отображается одинаково (не прячется)
Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments3

Information

Rating
Does not participate
Registered
Activity