, и в этом приложении я просматриваю прокрутку прокрутки/Пейджинг с каждой «страницей» с изображением и текстовым изображением. мне нужно сделать редактирование текста на каждой странице отдельно.Объект 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 (это работает)
Я попробовал удалить tapgesture totaly, и это ничего не меняет. Я не использую его для «стать FirstResponder». Я только однажды попробовал это сделать (реально, похоже, работал, но не мог получить editdone, чтобы он срабатывал тогда). И пейджинговые работы отлично allready отображаются изображения и текстовые изображения. и я могу прокручивать страницы, я могу использовать только те изображения, которые отсутствуют, редактирует текстовое представление, которое работает только на странице 1 (иногда 2) – JazeMan
Последнее предложение, которое может возникнуть (проверьте отображение перекрытий) связанное сообщение http: // stackoverflow .com/questions/7361750/detecting-if-uiview-is-intersecting-other-uiviews –
написал функцию проверки пересечения. и они не пересекаются. будет дважды проверять мой код. – JazeMan