2017-01-11 15 views
0

, и в этом приложении я просматриваю прокрутку прокрутки/Пейджинг с каждой «страницей» с изображением и текстовым изображением. мне нужно сделать редактирование текста на каждой странице отдельно.Объект c Текстовое изображение в scrollview не пропускает textViewShouldBeginEditing

Я также использую TapGestureRecocgnizer, который обрабатывает изображение на изображении. Я пытался заставить этот код работать на некоторое время, поэтому haw попробовал разные вещи. обрабатывая шоу-клавиатуру в taphandler (работает), но потом я не могу получить «финишное редактирование», чтобы сохранить текст, введенный пользователем.

Я попытался добавить делегат для textView как в scrollviewcontroller, который вызывает «make subview», так и в subview, который добавляет img и textview к представлению. это тоже почти произведение. Тхо только на первой или первых двух страницах

- (void)viewDidAppear:(BOOL)animated { 
[super viewDidLoad];  

UIView *subView = [[UIView alloc]initWithFrame:self.scrollViewOU.frame]; 

for(int i = 0; i < prgItm.slides.count; i++) { 
    CGRect frame; 

    frame.origin.x = self.scrollViewOU.frame.size.width * i ; 
    frame.origin.y = 0.0; 

    CGSize size = CGSizeMake(self.scrollViewOU.frame.size.width, self.scrollViewOU.frame.size.height); 
    frame.size = size; 
    self.scrollViewOU.pagingEnabled = YES; 

    slide *sld = prgItm.slides[i]; 

    UIImage *img; 

    NSString *imgName = sld.img; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
    NSString *fullPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:imgName]; 

    img = [UIImage imageWithContentsOfFile:fullPath]; 

    NSString *txt = [NSString stringWithFormat:@"%@", sld.notat]; 

    SlideView *slde = [[SlideView alloc] initWithImage:img note:txt frame:frame]; 

    [subView addSubview:slde];     

}  

[self.scrollViewOU addSubview:subView]; 
self.scrollViewOU.delaysContentTouches = YES;  

UITapGestureRecognizer *imgTap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[imgTap setNumberOfTapsRequired:1]; 
[self.scrollViewOU addGestureRecognizer:imgTap];  

self.scrollViewOU.contentSize = CGSizeMake(self.scrollViewOU.frame.size.width * slides.count, self.scrollViewOU.frame.size.height); 

CGPoint point = CGPointMake(scrollViewOU.frame.size.width * position, scrollViewOU.contentOffset.y); 

[self.scrollViewOU setContentOffset:point animated:YES]; 

} 

-(void)handleTap:(UITapGestureRecognizer *)Tap { 


UIScrollView *view = Tap.view; 
CGPoint point = [Tap locationInView:view]; 
int pageNr = round(view.contentOffset.x/view.frame.size.width); 

UIView *slideView = view.subviews[0].subviews[pageNr]; 
UIView *touchedView = [slideView hitTest:point withEvent:nil]; 

NSLog(@"view.tag: %d", touchedView.tag);  
NSLog(@"point: %f %f" , point.x, point.y); 
if(point.y >= slideView.subviews[1].frame.origin.y){ 
    UITextView *tmp = touchedView; 
    //tmp.delegate = self; 
    NSLog(@"touched text %@", tmp.text); 

    //[tmp becomeFirstResponder]; 
    //[tmp reloadInputViews]; 
}else { 
    [self performSegueWithIdentifier:@"ShowFullScreen" sender:self]; 
} 

}

И фиксирующим подвид класса

-(id)initWithImage:(UIImage *)slide note:(NSString *)text frame:(CGRect)frame 
{ 
self = [super init]; 
if(self) 
{ 
    CGRect rectView = CGRectMake(frame.origin.x, 
           frame.origin.y, 
           frame.size.width, 
           frame.size.height); 

    self.frame = rectView; 
    CGRect imgRect = CGRectMake(0, 
           0, 
           frame.size.width, 
           frame.size.height * 0.75); 

    UIImageView *subview = [[UIImageView alloc] initWithFrame:imgRect]; 

    subview.contentMode = UIViewContentModeScaleAspectFit; 

    //[subview setAutoresizingMask:UIViewAutoresizingNone]; 
    subview.image = slide; 

    subview.userInteractionEnabled = YES; 
    subview.tag = 1; 

    CGRect noteRect = CGRectMake(frame.size.width * 0.01, 
           frame.size.height *0.76, 
           frame.size.width * 0.98, 
           frame.size.height *0.23); 

    UITextView *noteView = [[UITextView alloc] initWithFrame:noteRect]; 

    [noteView.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]]; 
    [noteView.layer setBorderWidth:2.0]; 

    noteView.layer.cornerRadius = 5; 
    noteView.clipsToBounds = YES; 

    noteView.userInteractionEnabled = YES; 
    noteView.editable = YES; 

    noteView.text = text; 


    [noteView setKeyboardType:UIKeyboardTypeDefault]; 

    [noteView setDelegate:self]; 


    [self addSubview:subview]; 
    [self addSubview:noteView]; 


    self.userInteractionEnabled = YES; 

     } 
return self; 
} 
-(BOOL)canBecomeFirstResponder { 
    return YES; 
} 

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView { 
//[textView becomeFirstResponder]; 
return YES; 
} 

-(BOOL)textViewShouldEndEditing:(UITextView *)textView { 
[textView resignFirstResponder]; 
return YES; 
} 

Итак, чтобы подвести итоги. Мне нужно scrollview, чтобы содержать x страниц с Img и textView. Мне нужно щелкнуть текстовое окно, чтобы начать редактирование текстового поля. и мне нужен способ сохранить отредактированный текст, когда пользователь закрывает клавиатуру. страница также должна реагировать нажать на IMG (это работает)

ответ

0

Так получилось, что мне нужно, чтобы изменить ширину parrent UIView, чтобы быть таким же, как общий размер контента Scrollview так (fram.width * страниц)

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

0

для X страниц используйте параметр свойства pagingMode Scrollview к подлинным

для нажатия texview быть уверенными, что UIUsersInteraction включен, и вы получили делегат TextView и «осуществлять ПРОТОКОЛ» becomeFirstReponder

Пожалуйста, не используйте кран, чтобы стать ответчиком в TextView вы идете в больших неприятностях

вы должны удалить tapGesture ASAP он, вероятно, получил щелчок и запретил вам получить вызов ответчика texview

+0

Я попробовал удалить tapgesture totaly, и это ничего не меняет. Я не использую его для «стать FirstResponder». Я только однажды попробовал это сделать (реально, похоже, работал, но не мог получить editdone, чтобы он срабатывал тогда). И пейджинговые работы отлично allready отображаются изображения и текстовые изображения. и я могу прокручивать страницы, я могу использовать только те изображения, которые отсутствуют, редактирует текстовое представление, которое работает только на странице 1 (иногда 2) – JazeMan

+0

Последнее предложение, которое может возникнуть (проверьте отображение перекрытий) связанное сообщение http: // stackoverflow .com/questions/7361750/detecting-if-uiview-is-intersecting-other-uiviews –

+0

написал функцию проверки пересечения. и они не пересекаются. будет дважды проверять мой код. – JazeMan

 Смежные вопросы

  • Нет связанных вопросов^_^