Передать имя в подкласс UIView - PullRequest
0 голосов
/ 08 апреля 2011

Я создал подкласс UIView для обработки действий hitTest и Touches, так как UIView - это подвид UIScrollview, и мне нужно, чтобы и UIView, и UIScrollView были перетаскиваемыми.

Я получил егоРаботает на 95% - подкласс UIView работает отлично, если я просто установил цвет фона - но если я установил подпредставление с изображением с прозрачностью, оно не всегда отвечает.У меня есть некоторые идеи на этот счет, так что это не вопрос.

Мой вопрос заключается в том, что, поскольку у меня есть несколько экземпляров UIView с подклассами в UIScrollview, как я могу определить, какой из них перетаскивается.

В предыдущем приложении я просто использовал;

if ([touch view] == blah)   {           
//do something;  
}  
else if ([touch view] == fred) {  
//do nothing;  
}  

но так как это находится в моем основном файле .m приложения, это было нормально, так как бла и Фред были созданы там в viewdidload, но так как события прикосновения в моем коде захвачены в подклассе, они не 'не знаю о бла и фреде.

так 1) как я могу сообщить подклассу о добавленных мною элементах - или -
2) как передать имя элемента вподкласс в hitTest или TouchesBegan - или - *
3) есть строка кода, чтобы получить имя текущего элемента

Любая помощь очень ценится.

Ответы [ 3 ]

0 голосов
/ 08 апреля 2011

добавьте распознаватель panGesture к вашему классу подпредставления

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panPiece:)];
    [panGesture setMaximumNumberOfTouches:2];
    [panGesture setDelegate:self];
    [self addGestureRecognizer:panGesture];

используйте этот код для перевода, и у вас не возникнет проблем с перетаскиванием неправильного представления

- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer
{

[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {

    CGPoint translation = [gestureRecognizer translationInView:[self superview]];

    self.center = CGPointMake([self center].x + translation.x, [self center].y + translation.y);
    [gestureRecognizer setTranslation:CGPointZero inView:[self superview]];
}
}
0 голосов
/ 10 апреля 2011

Так что для всех, у кого тоже есть такая же проблема.

Я нашел простое решение:

В моем viewDidLoad, когда я добавил подклассы, я просто добавляю в строку
customView1.tag = 111;

тогда в подклассе в моих методах касаний я могу просто использовать:
if ([touch view] .tag == 111) {

Simple!:)

0 голосов
/ 08 апреля 2011

Хорошо, это то, как вы могли бы сделать это легко с NotificationCenter.

Объект, которому нужно знать, какое подвид перетаскивается, может прослушивать уведомление с именем, скажем, "SubviewIsDragged", и каждое подпредставление может отправлять уведомление "SubviewIsDragged "передает себя в качестве параметра.

Это код:

Объект, который должен знать о перетаскивании регистров в своем методе init, следующий:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(subviewIsDragged) name:@"SubviewIsDragged" object:nil];

Методкоторый выполняет действия после обнаружения перетаскивания:

-(void)subviewIsDragged:(NSNotification *)notification
{
    //Here you can get your subclass of UIView
    UIView* view = [notification object];

    // do what ever you want with the object
}

Теперь в вашем подклассе UIView добавьте следующее к вашему методу перетаскивания:

[[NSNotificationCenter defaultCenter] postNotificationName:@"SubviewIsDragged" object:self];

Обратите внимание, что вы передаете объект "self", но выможет передать любой другой объект, который вы хотите, как NSString ID

Надеется на эту помощь.

...