2012-09-02 61 views
1

我在所有的UICellViews都有按鈕。當按下這些按鈕時,會觸發一些操作。直到現在,事情一直很好。如何獲取UITable中的UIButton或UILabel的位置?

我怎樣才能得到這些按鈕之一相對於屏幕上的可見區域的位置?你有什麼想法(或教程)如何實現?

+0

當你說*「相對於屏幕上的可見區域」*時,是指相對於窗口嗎? – sch

+0

是呀這就是我的意思 –

回答

6

您可以使用UIView的方法-convertRect:toView:

CGRect frameInWindow = [button convertRect:button.bounds toView:viewController.view]; 

這裏是一個小測試:

- (void)loadView 
{ 
    [super loadView]; 

    self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 

    UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 300, 300)]; 
    [self.view addSubview:parentView]; 

    UIView *childView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
    [parentView addSubview:childView]; 

    CGRect rect1 = [childView convertRect:childView.bounds toView:self.view]; 
    // 200, 200, 100, 100 => correct 

    // Other tests for the discussion of @H2CO3's answer. 

    CGRect rect2 = [childView.superview convertRect:childView.frame toView:self.view]; 
    // 200, 200, 100, 100 => correct 
    CGRect rect3 = [childView convertRect:childView.frame toView:self.view]; 
    // 300, 300, 100, 100 => wrong 
} 
+0

所以我用這個來獲取在uview中的tableview中按鈕的確切位置:CGRect rex = [button convertRect:button.bounds fromView:self.tableView.superview]; –

+0

@user - 你可能是指'toView'而不是'fromView'。 – sch

+0

順便說一下,座標是負數,除非一個按鈕向上滾動,所以它的原點在屏幕上部 –

2

您可以使用視圖的frame屬性來獲取相對於它的父自己的立場:

CGRect frame = someView.frame; 
CGPoint topLeftCorner = frame.origin; 

如果這還不夠(即你想獲得相對於任何其他視圖的視圖框架,而不僅僅是其超視圖),可以使用各種轉換方法:

CGRect relativeFrame = [view convertRect:view.bounds toView:anotherView]; 

有關詳細信息,請參閱UIView class reference

+0

感謝您的快速回復。我馬上試試 –

+0

也不應該這樣:'[view.superView convertRect:view.frame toView:anotherView];'?或'[view convertRect:view.bounds toView:anotherView];'? – sch

+0

請參閱我編輯的答案。 – sch