2014-12-22 15 views
5

Lo so convertRect:toRect è la chiave qui, ma non sono sicuro di come chiamarlo. Ho una sottoview della mia cella e voglio la sua posizione nell'intera finestra dell'app.Come posso ottenere la posizione di sottoview nel mio UITableViewCell rispetto all'intera finestra?

Ho bisogno di sapere questo quando tocco questo pulsante (la sottoview) nel suo metodo di azione di destinazione. Devo chiamare la funzione convertRect:toRect sulla cella, immagino, per ottenere le coordinate giuste, ma in questo metodo non ho alcun riferimento alla cella stessa.

Mi arrampico sulla gerarchia di superview? Ciò sembra grave, dato che non sono completamente sicuro di cosa otterrei, dato che è incorporato nel contentView della cella, e Apple fa cose strane con le loro sottoview private e quant'altro.

Codice:

@IBAction buttonPressed(sender: UIButton) { 
    // This button got the callback that it was pressed. It's in a cell. I need to convert its rect to that of the window here. I need the coordinate system it's calculated from (the cell) which I'm not sure of how to easily do in a target action callback. 
} 
+0

possibile duplicato di [iPhone - Ottieni posizione di UIView nell'intera UIWindow] (http://stackoverflow.com/questions/1465394/iphone-get-position-of-uiview-within-entire-uiwindow) –

+0

@LyndseyScott No , questo è un caso specifico nel contesto delle sottoview delle celle, dove non è semplice ottenere la vista di riferimento della vista. –

+1

Perché pensi questo? –

risposta

7

In realtà è molto semplice:

CGRect windowRect = [someSubview convertRect:someSubview.bounds toView:nil]; 

Supponendo di avere un gestore di pulsante:

- (void)someButtonHandler:(id)sender { 
    UIButton *button = sender; 

    // do your stuff 

    CGRect windowRect = [button convertRect:button.bounds toView:nil]; 
} 

Naturalmente è ancora più facile se il metodo è configurato come :

- (void)someButtonHandler:(UIButton *)button { 
} 
+0

Come ottengo 'someSubview' in questo caso delineato nella domanda? –

+0

Tocca a voi. La tua domanda fa sembrare che tu abbia già la sottoview. In caso contrario, chiarisci la tua domanda perché non è chiaro cosa hai. – rmaddy

+0

Ho la sottoview e ho pensato che la domanda fosse chiara. La sottoview è in una cella.Chiamare il codice 'convertRect' nella sottoview non presenta il risultato corretto, in quanto il suo sistema di coordinate è in termini di cella in cui è contenuto. –