2010-12-14 1 views
0

私はUITouchとUIGestureRecognizerについて読んだことがあります。 私には1件あります。私のアプリでは、私はbarbuttonitemを持って、私はボタンをタップすると、別のビューを表示したい。私がシングルレットをしたら、私はテキストビューを表示したいですが、再びシングルレットをすると、そのボタンからポップオーバーを表示したいのです。誰かが私にそれを行うサンプルコードを与えることができ、UITouchとUIGestureRecognizerの違いは何ですか? withEvent::とtouchesEnded:withEvent:この問題を解決するために、barbuttonitemはUISegmentedControlのラッパーですは、UIBarButtonItem(UISegmentedControlをラップする)とは別のタップ数で別のビューを表示します。

UPDATE

、ここで私はtouchesBeganを使用しようとしてdesain alt text

からpicがありますしかし、私はその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]; 

}

01: これは私が作ったコードであります
- (IBAction)docSegmentAction:(id)sender{ 
NSLog(@"open file"); 
isFileOpen = YES; 
[self.moreFilePopOverController dismissPopoverAnimated:YES]; 
[self.filePropertiesPopover dismissPopoverAnimated:YES]; 

[self showTextView]; 

}

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

答えて

0

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

+0

barbuttonitemはプログラムで作成されているため、UITouchまたはUIGestureRecognizerを使用する必要がありますが、UISegmentedControlのラッパーであり、私の質問で宣言して申し訳ありませんが、まだ混乱しています –

関連する問題