2013-04-21 8 views
7

UITableView sembra avere un comportamento automatico in cui, se una cella contiene un campo di testo o textView e quel campo o vista diventa il primo risponditore, il TableView scorre se stesso in modo che la cella non sia oscurata dalla tastiera. Sono sicuro che, nella maggior parte dei casi, è molto utile.Impedisci a UITableView di scorrere verso la cella che contiene il testo Campo

Nel mio caso non va bene. TableView si trova all'interno di un contenitore più piccolo e il comportamento predefinito lascia il campo ancora oscurato. Voglio gestire me stesso lo spostamento dell'intero contenitore e il comportamento di scorrimento predefinito è di intralcio.

Qualcuno sa come posso "disattivare" questa funzionalità di UITableView?

+0

un'occhiata a questa domanda http://stackoverflow.com/questions/4585718/disable-uiscrollview-scrolling-when-uitextfield-becomes-first-responder –

+0

I' Non sono sicuro che sia perché è un UITableView, piuttosto che un UIScrollView diretto, o perché quelle soluzioni sono state proposte con un SDK più vecchio, ma nessuna delle soluzioni proposte in quel post ha funzionato per me. Con ogni soluzione, il mio TableView continuava a scorrere automaticamente. –

+0

[Questa risposta] (http://stackoverflow.com/a/32313035/4482870) (mia) descrive una soluzione piuttosto semplice per il problema. – tonso

risposta

1

Avevo esattamente lo stesso problema, avevo un UITableView in una vista contenitore più piccola e quando ho selezionato un UITextField nella tabellaView si sarebbe automaticamente spostato su una posizione indesiderata. Questo è il comportamento predefinito di UITableView e non sembra esserci alcun modo per disattivarlo.

Invece, ho cambiato questo controller subView per essere una sottoclasse di un UIViewController invece di un UITableViewController. vale a dire per la mia TransportViewController.h che controlla un tableView:

@interface TransportViewController : UITableViewController <UITextFieldDelegate> 

divennero:

@interface TransportViewController : UIViewController <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate> 

Impostando la classe come classe UIViewController invece, l'scorrimento automatico delle celle della tabella non accadrà.

Ora che non si sottoclasse UITableViewController, ora è necessario impostare manualmente la proprietà "tableView" in modo che punti alla vista tabella appropriata. È possibile collegare questo in IB, che vi darà qualcosa di simile:

@property (strong, nonatomic) IBOutlet UITableView *tableView; 

Infine si dovrà anche impostare questa proprietà tableView appena assegnato ad essere il delegato e dati di origine della tabella. È possibile farlo nel metodo 'viewDidLoad' in questo modo:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _tableView.dataSource = self; 
    _tableView.delegate = self; 

} 

Questo fermerà lo scorrimento automatico che è insita nella UITableViewController quando viene selezionato un UITextField. Spetta quindi a te implementare tutti i metodi UITableViewDataSource necessari e gestire i tuoi metodi di scorrimento automatico.

0

Ho risolto questo problema implementando il metodo scrollViewDidScroll: (dal protocollo UIScrollViewDelegate). Questo metodo viene chiamato quando la tastiera esegue lo scorrimento UITableView.

Ecco quello che ho fatto:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    [tableViewController.tableView setContentOffset:CGPointMake(0., 0.)]; 
} 
+0

questo metodo viene chiamato su qualsiasi modifica dell'offset del contenuto. – Andy

Problemi correlati