2012-03-30 83 views
0

我有這個日曆,由編程創建的48幀組成...當我做一個UITapGestureRecognizer時,它返回幀的x,y座標...任何想法如何確定哪個幀被點擊?如何確定哪個按鈕被點擊?

UPDATE:這是創建框架代碼:

self.frame = frame; 
self.backgroundColor = [UIColor colorWithRed:rd1 green:gr1 blue:bl1 alpha:1.0]; 
[[self layer] setBorderColor:[[UIColor blackColor] CGColor]]; 
[[self layer] setBorderWidth:0.5]; 
[[self layer] setCornerRadius:10]; 
[self setClipsToBounds: YES]; 
+0

您能否提供更多信息,例如:你如何創建和佈局你的48個按鈕?例如,您可以遍歷所有按鈕,並測試您的座標是否屬於按鈕的框架,或者如果您知道佈局規則,則從座標計算按鈕... – Vladimir 2012-03-30 20:21:27

+2

如果您有按鈕,爲什麼不爲每個按鈕分配一個動作而不是手勢識別器? – Vladimir 2012-03-30 20:22:19

回答

0

如果你有按鈕,如果你讓他們,拍打他們將觸發你鏈接到敲擊動作的方法。

因此每個按鈕都有一個「標籤」屬性。

標籤屬性可以讓你知道哪個按鈕觸發了該方法。

編輯:

如果你的按鈕所屬的UIButton類,你可以通過標籤屬性按鈕的標籤,即:

mybutton.tag 

[mybutton tag] 
+0

如何添加標籤? (請參閱原文中的更新) – SpokaneDude 2012-03-30 20:24:48

+0

您的代碼不會在UIButton類的含義中創建UIButton。請參閱:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html – moxy 2012-03-30 20:32:01

+0

我明白你在說什麼......好吧,讓我們改變它..我我正在繪製一個矩形...我如何識別每一個(如UIButton中的「標記」)? – SpokaneDude 2012-03-30 20:36:23

1

如果我明白了什麼你正在做 - 然後下面的例程可能是有用的。它獲取觸摸座標,然後對陣列中的每個矩形進行測試。它的CPPoint是在裏面,然後你有你的索引號,並根據你可以做你需要做的。

根據您定義rects數組的方式,您可能需要規範化觸摸CGPoint。

無論如何 - 希望它有幫助。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

UITouch *touch = [touches anyObject]; 
CGPoint point = [touch locationInView:self.view]; 

// See if the point touched is within these rectangular bounds 
if (CGRectContainsPoint(self.gridRect, point)) 
{ 
    CGRect rect; 
    int cnt = self.cellRectArray.count; 
    for (int i = 0; i < cnt; i++) { 

     rect = [[self.cellRectArray objectAtIndex:i] cellRect]; 
     rect = CGRectOffset(rect, self.gridOriginX, self.gridOriginY); 
     rect = CGRectInset(rect, 10, 10); 
     if (CGRectContainsPoint(rect, point)) { 
      // do something 
      break; 
     } 
    } 
} 

}

+0

我認爲這會做到這一點......我認爲我需要通過捕獲每個矩形的座標並將其存儲在一個數組中,以及其他數據(如日期等)來開始。我會試一試並回復您...感謝您的回覆! – SpokaneDude 2012-03-30 21:30:26

+0

唯一棘手的是@在相同的座標空間中工作:觸摸座標與UIView座標。這就是'CGRectOffset'的用途 - 將它們相對於視圖的x/y進行移位。此外,「cellRect」是一個基於NSObject的自定義類,用於將CGRects存儲在NSArray中,因爲您無法將原始CGRects存儲在NSArray中。 - 乾杯! – 2012-03-30 22:01:28

0

如果您使用的是UITapGestureRecognizer那麼爲什麼不直接問哪個查看連接到?

- (void)cellTapped:(UITapGestureRecognizer *)tapGestureRecognizer; 
{ 
    NSLog(@"%@", tapGestureRecognizer.view); 
} 
相關問題