0

私はUITouchとUIGestureRecognizerについて読んだことがありますが、それらの違いはまだ本当に混乱しています。私は1つのケースを持っています。私のアプリでは、barbuttonitem があり、そのボタンをタップすると別のビューを表示したいと考えています。シングルタップしたらテキストビューを表示したいのですが、もう一度シングルタップしたらそのボタンからポップオーバーを表示したいです。誰かが私にそれを行うためのサンプルコードを提供し、UITouch と UIGestureRecognizer の違いについて少し説明することができますか?

アップデート

barbuttonitem は UISegmentedControl のラッパーです。これは desain の写真です 代替テキスト

touchesBegan:withEvent: と touchesEnded:withEvent: を使用してこの問題を解決しようとしましたが、その barbuttonitem に接続する方法がわかりません。これは私が作ったコードです:

-(void)addSegment{


NSAutoreleasePool *pool;
int count_doc = [_docsegmentmodels count];
NSLog(@"count doc add segment : %d", count_doc);
pool = [[NSAutoreleasePool alloc] init];
DocSegmentedModel *sl;
NSMutableArray *segmentTextMutable = [NSMutableArray array];

for(int i=0 ;(i<count_doc && i < max_segment);i++){
    sl = [_docsegmentmodels objectAtIndex:i];
    NSString *evalString = [[KoderAppDelegate sharedAppDelegate] setStringWithLength:sl.docSegmentFileName:10];  
    [segmentTextMutable addObject:NSLocalizedString(evalString,@"")];

}



NSArray *segmentText = [segmentTextMutable copy];

_docSegmentedControl = [[UISegmentedControl alloc] initWithItems:segmentText];
_docSegmentedControl.selectedSegmentIndex = 0; 
_docSegmentedControl.autoresizingMask =  UIViewAutoresizingFlexibleHeight;
_docSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBezeled;//UISegmentedControlStylePlain;// UISegmentedControlStyleBar;//UISegmentedControlStyleBezeled;
//docSegmentedControl.frame = CGRectMake(0, 0, 800, 46.0);
[_docSegmentedControl addTarget:self action:@selector(docSegmentAction:) forControlEvents:UIControlEventValueChanged];

// Add the control to the navigation bar
//UIBarButtonItem *segmentItem = [[UIBarButtonItem alloc] initWithCustomView:_docSegmentedControl];
segmentItem = [[UIBarButtonItem alloc] initWithCustomView:_docSegmentedControl];
self.navItem.leftBarButtonItem = segmentItem;
self.navItem.leftBarButtonItem.title = @"";


[pool release];
[segmentItem release];
[_docSegmentedControl release];

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[NSObject cancelPreviousPerformRequestsWithTarget:self 
                                         selector:@selector(segmentItemTapped:) object:segmentItem];

}

-(void)touchesEnd:(NSSet *)touches withEvent:(UIEvent *)event{
if (touches.count == 1) {
    if (theTouch.tapCount == 2) {
        [self performSelector:@selector(segmentItemTapped:)withObject:segmentItem afterDelay:0.35];
    }else {
        [self performSelector:@selector(docSegmentAction:) withObject:segmentItem afterDelay:0.0];
    }
}   

}

- (IBAction)segmentItemTapped:(id)sender{  

if (self.fileProperties == nil) {
    self.fileProperties = [[[FilePropertiesViewController alloc] initWithNibName:@"FilePropertiesViewController" bundle:nil]autorelease];
    fileProperties.delegate = self;
    self.filePropertiesPopover = [[[UIPopoverController alloc] initWithContentViewController:fileProperties]autorelease];
    [_docsegmentmodels objectAtIndex:_docSegmentedControl.selectedSegmentIndex];
}

fileProperties.docProperties = _docsegmentmodels;
fileProperties.index = _docSegmentedControl.selectedSegmentIndex; //index utk nilai2 di textfield
[self.filePropertiesPopover presentPopoverFromBarButtonItem:sender 
                                   permittedArrowDirections:UIPopoverArrowDirectionUp
                                                   animated:YES];

}

- (IBAction)docSegmentAction:(id)sender{
NSLog(@"open file");
isFileOpen = YES;
[self.moreFilePopOverController dismissPopoverAnimated:YES];
[self.filePropertiesPopover dismissPopoverAnimated:YES];

[self showTextView];

}

私の理解に間違いはありますか?

4

1 に答える 1

0

あなたの場合、UIGestureRecognizer は必要ありません。barbuttonitem のアクションを、ボタンがタップされたときに呼び出されるメソッドに設定するだけです。メソッドにテキストビューの状態を追跡させ、それに応じてそれを表示するか、ポップオーバーを表示します。

于 2010-12-14T04:10:48.647 に答える