并且在这个应用程序中我有一个sidescrolling / Paging scrollview,每个“page”都有一个图像和一个textView。我需要做的是分别在每个页面上编辑textview。
我还有一个TapGestureRecocgnizer来处理图像上的点击 我一直试图让这段代码工作一段时间,所以haw尝试了不同的东西。在taphandler(作品)中使用show键盘,然后我似乎无法进行“完成编辑”,因此我可以保存用户输入的文本。
我试图在调用“make subview”的scrollviewcontroller和在视图中添加img和textview的子视图中为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];
}
}
make Subview类
-(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包含带有Img和textView的x页面。 我需要单击textview开始编辑textview。当用户关闭键盘时,我需要一种方法来保存编辑过的文本。该页面还需要做出反应来点击img(这个工作)
答案 0 :(得分:0)
使用scrollView属性pagingMode设置为true
单击texview,确保已启用UIUsersInteraction,并且您已委托textview并“实现protocole”,成为第一个应答器
请不要使用tap来成为textView的响应者 麻烦
你应该尽快删除tapGesture他可能得到了点击并禁止你接到texview响应者的电话
答案 1 :(得分:0)
所以事实证明我需要将parrent UIview的宽度更改为与总scrollview内容大小相同(fram.width * pages)
这现在有效。这有点奇怪,因为我尝试了很多东西,并且在我第一次遇到这个问题后添加了错误大小的UIview。