iPhone: UIButton buttonWithType Переопределения для возврата подкласса

Я хочу смочь создать UIButton с быстро реагирующей областью увеличенного размера. Я знаю, что один способ сделать, который должен переопределить hitTest метод в подклассе, но как я инстанцирую своего объекта пользовательской кнопки во-первых?

[OversizedButton buttonWithType: UIButtonTypeDetailDisclosure];

не работает из поля, потому что buttonWithType возвращает UIButton, не OversizedButton.

Таким образом, кажется, что я должен переопределить buttonWithType метод также. Кто-либо знает, как сделать это?

@implementation OversizedButton

+ (id)buttonWithType:(UIButtonType)buttonType
{
   // Construct and return an OversizedButton rather than a UIButton
   // Needs to handle special types such as UIButtonTypeDetailDisclosure
   // I NEED TO KNOW HOW TO DO THIS PART
}

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{
   // Return results if touch event was in oversized region
   // I ALREADY KNOW HOW TO DO THIS PART
}

@end

С другой стороны, возможно, я мог создать кнопку с помощью alloc/initWithFrame. Но buttonType свойство только для чтения, поэтому как Вы создаете типы пользовательской кнопки?

Примечание: Я знаю, что существуют другие способы сделать это, такое как наличие невидимой кнопки позади видимой. Я не забочусь о том подходе и предпочел бы избегать его. Любая справка на подходе, описанном выше, была бы очень полезна. Спасибо

10
задан Amagrammer 1 April 2010 в 18:53
поделиться

2 ответа

UIButton buttonWithType: возвращает UIButton или UIRoundedRectButton , в зависимости от значения параметр типа .

Поскольку UIButton не предоставляет метод initWithType: , я считаю, что было бы опасно пытаться переопределить buttonWithType: .

Вместо этого я предлагаю вам подкласс UIControl . Затем вы можете добавить кнопку в качестве подпредставления к своему элементу управления и перехватить hitTest: withEvent: .

3
ответ дан 4 December 2019 в 04:01
поделиться

Кнопка Тип кнопки не используется нигде в UIKit, и в вашем коде вы всегда можете проверить -isKindOfClass: , поэтому перезапись + buttonWithType: для этого свойства довольно бессмысленна IMO. Просто используйте

return [[[OversizedButton alloc] initWithFrame:...] autorelease];

(вы можете переопределить тип кнопки с помощью недокументированного метода _setButtonType: .)

0
ответ дан 4 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: