Получение неправильного тега с помощью UITapGestureRecogniser в iOS

Я очень новичок в iPhone, я работаю с UITapGestureRecognizer на пользовательском элементе управления KASlideShow одним нажатием. Я добавил KASlideShow, используя XIB, чтобы слайдировать три изображения через несколько интервалов. Моя проблема в том, что я не получаю правильный индекс после нажатия на изображение. Не могли бы вы помочь мне, где моя ошибка в моем коде ниже:

UITapGestureRecognizer *tapGestureRecognizerInstruction = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTapOnView:)];
[tapGestureRecognizerInstruction setNumberOfTapsRequired:1];
tapGestureRecognizerInstruction.delegate = self;

slideshow.delegate = self;
[slideshow setDelay:1]; // Delay between transitions
[slideshow setTransitionDuration:.5]; // Transition duration
[slideshow setTransitionType:KASlideShowTransitionSlide];
[slideshow setImagesContentMode:UIViewContentModeScaleAspectFill];
[slideshow addGestureRecognizer:tapGestureRecognizerInstruction];

arraySlideShowImages = [[NSMutableArray alloc] initWithObjects:[UIImage imageNamed:@"1.jpg"], [UIImage imageNamed:@"2.jpg"], [UIImage imageNamed:@"3.jpg"],nil]; //array of images


for (int i=0; i<[arraySlideShowImages count]; i++) {

slideshow.tag = i;
[slideshow addImage:[arraySlideShowImages objectAtIndex:i]];

}

[slideshow start];


-(void)handleTapOnView:(id)sender
{
    UIGestureRecognizer *recognizer = (UIGestureRecognizer*)sender;
    KASlideShow * slideshow1 = (KASlideShow *)recognizer.view;

    NSLog(@"slide show tag is = %ld", (long)slideshow1.tag);    
}

Каждый раз, когда я получаю «тег слайд-шоу» 2, я хочу отобразить конкретное выбранное изображение в полноэкранном режиме. Пожалуйста, предложите мне добиться правильного тега.

Спасибо!


person user2786    schedule 20.08.2014    source источник
comment
Войдите [slideShow tag] после вашего for loop, вы можете понять, в чем проблема. Вместо этого вы можете получить currentIndex.   -  person Larme    schedule 20.08.2014
comment
да @Larme, bcos цикла for я всегда получаю последний счетчик массива, т.е. 2. но как получить текущий индекс, сэр?   -  person user2786    schedule 20.08.2014
comment
вам нужно создать жест касания для каждого слайд-шоу.   -  person Pawan Rai    schedule 20.08.2014
comment
Это свойство KaSlideShow кажется из GitHub.   -  person Larme    schedule 20.08.2014
comment
Почему вы вообще используете теги, когда у вас есть ссылка на само представление?   -  person Anorak    schedule 20.08.2014
comment
Не могли бы вы помочь мне, как я могу сделать со ссылкой на сам вид?   -  person user2786    schedule 20.08.2014
comment
Всем спасибо, теперь работает. Я установил тег для методов делегата SlideShow.   -  person user2786    schedule 20.08.2014
comment
@ user2786: это неправильный подход к получению тегов подпредставления. пожалуйста, попробуйте ответ ниже.   -  person Shamsudheen TK    schedule 20.08.2014


Ответы (2)


Вы получаете правильный тег.

Тег всегда должен быть 2, потому что ваш счетчик arraySlideShowImages равен 3, и вы написали slideshow.tag = i; внутри цикла for. Тег будет изменен три раза как 0,1,2.

Если вы хотите, чтобы это было изменено на 0, 1 и 2 в соответствии с изображениями, вы должны установить тег для представлений изображений внутри метода addImage. Также обязательно используйте свойство тега с 1 вместо нуля. Так что установите свой тег как i+1.

for (int i=0; i<[arraySlideShowImages count]; i++) 
{
   [slideshow addImage:[arraySlideShowImages objectAtIndex:i] Index:i+1];
}

//modify your addImage method
- (void)addImage:(UIImage *)image Index:(int)itemIndex
{
  //your image view tag as itemIndex
}

-(void)handleTapOnView:(id)sender
{
    UITapGestureRecognizer *recognizer = (UITapGestureRecognizer *)sender;

    UIImageView* clickedImageView = [recognizer.view isKindOfClass:[UIImageView class]]?(UIImageView *)recognizer.view:nil;

    NSLog(@"clickedImageView tag is = %d", clickedImageView.tag);    
}
person Shamsudheen TK    schedule 20.08.2014
comment
@RamshadСпасибо, я хочу, чтобы тег изменился на 0, 1 и 2, как показано на изображениях. - person user2786; 20.08.2014
comment
@ user2786: я изменил ответ. Пожалуйста, дайте мне знать статус. - person Shamsudheen TK; 20.08.2014

А. Установить тег

for(int i=0; i<[arraySlideShowImages count]; i++) 
{
[slideshow addImage:[arraySlideShowImages objectAtIndex:i] Index:i+1];
}

//modify your addImage method
- (void)addImage:(UIImage *)image Index:(int)itemIndex
 {
 //your image view tag as itemIndex
 }

1. Добавьте метод в класс KASlideShow.h

@protocol KASlideShowDelegate <NSObject>

- (void)kaSlideShowSingleTap:(KASlideShow *) slideShow;

И добавьте приведенный ниже код в методе handleSingleTap класса KASlideShow.m.

if([self.delegaterespondsToSelector:@selector(kaSlideShowSingleTap:)])
[self.delegate   kaSlideShowSingleTap:self];

И вызовите ниже метод делегата в вашем контроллере представления (где вы хотите получить тег)

- (void)kaSlideShowSingleTap:(KASlideShow *) slideShow
{
NSLog(@"kaSlideShowSingleTap, index : %@",@(slideShow.currentIndex));          }
person Dev Lovewanshi    schedule 16.12.2015
comment
Пожалуйста, используйте его для получения правильного тега слайд-шоу. - person Dev Lovewanshi; 16.12.2015