2015-02-20 17 views
7

Ho uno scenario in cui sto utilizzando libreria di terze parti MBProgressHUD su un UITableViewController ma le questioni è ogni volta che ho scorrere su e giù per l'HUD si muove con la pergamena.Come risolvere la posizione di MBProgressHUD per centrare in un UITableView

Non voglio disabilitare lo scorrimento di UITableView e inoltre voglio mantenere l'HUD al centro di UITableView.

Esiste un modo possibile per implementarlo?

+1

invia il codice che usi per aggiungere mbprogressHud in tableview ... – Chandan

+0

Fornisci del codice se hai un problema specifico come questo.È sufficiente visualizzare il codice come si aggiunge 'MBProgressHud' alla vista, quindi sappiamo cosa stai facendo e possiamo aiutarti;) –

risposta

4

Aggiunta HUD alla super vista del Tableview o navigationController.view risolve il problema:

UIView *view = self.tableView.superview; 
// UIView *view = self.navigationController.view; if you are using navigationController 
if (view != nil) { 
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; 
} 
0

numero di maggio che si sta aggiungendo l'HUD in tablview, in modo da aggiungere nella vostra vista come ..

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.mode = MBProgressHUDModeText; 
    hud.labelText = @"Loading"; 
} 
+0

sì Sto aggiungendo l'HUD a TableViewController e non posso cambiare l'implementazione della classe . C'è un modo per mantenere l'HUD al centro della tableview, anche quando scorro su e giù –

0

creare l'oggetto di MBProgressHUD (esempio: MBProgressHUD * HUD). Inizializzare e aggiungere HUD come visualizzazione secondaria sulla vostra vista principale e fare questo

[HUD setCenter:self.view.center]; 
[HUD setUserInteractionEnabled:YES]; 
+0

@Jasmeent: la mia vista principale è TableView che è derivata dalla ScrollView, ogni volta che aggiungo HUD alla vista tabella scorre su e giù con le righe della tabella. Voglio mantenerlo al centro della vista tabella sempre –

0

Sì, c'è un modo possibile per risolvere il problema. Prima di [HUD show:YES], aggiungere questo codice.

HUD.yOffset = CGRectGetMinY(self.tableView.bounds); 

e il gioco è fatto.

Sembra HUD s' view.frame è impostato come è superview di frame, e quindi è in una posizione sbagliata, se si scorre verso il basso e poi mostrare HUD. Aggiungendo la linea si aggiunge yOffsetyOffset alla quantità di scorrimento verso il basso.

+0

Questo imposterà la posizione iniziale dell'HUD al centro dello schermo dopo lo scorrimento. Tuttavia, se si scorre lo schermo dopo che appare, non si attacca al centro dello schermo. – Bruce

+0

Sì, l'ho usato con 'HUD.userInteractionEnabled = NO;'. Altrimenti dovresti resettare la sua posizione ogni volta che si scorre la vista implementando '- (void) scrollViewDidScroll: (UIScrollView *) scrollView' – gnuchoi

+0

Capito, grazie! Ora sto usando un modo alternativo, che è quello di collegare l'HUD alla superview di UITableView, in questo modo l'HUD apparirà nel mezzo senza impostare yOffset e l'interazione dell'utente è disabilitata di default. – Bruce

0

Questo ha funzionato per me. Impostalo su parentViewController, quindi su Visualizza.

0

Ho provato ad aggiungerlo al controller di navigazione come indicato sopra e ho ricevuto alcuni errori di unwrapping quando l'ho tradotto in modo rapido. Ho trovato this fix e funziona sempre. Ringraziamo Aleksei Kaut :-).

- (void)showLoadingIndicator 
{ 
    [MBProgressHUD showHUDAddedTo:[UIApplication sharedApplication].keyWindow animated:YES]; 
} 

- (void)hideLoadingIndicator 
{ 
    [MBProgressHUD hideAllHUDsForView:[UIApplication sharedApplication].keyWindow animated:YES]; 
} 
0

Swift 3.0

override func viewDidLoad() { 
     super.viewDidLoad() 

     progress = MBProgressHUD(view: view) // <<-- That's the trick 
     view.addSubview(progress!) 
     view.bringSubview(toFront: progress!) 
     progress?.show(animated: true) 
     progress?.mode = .indeterminate 
     progress?.animationType = .fade 
    } 
0

Solutions è semplice. Quando si utilizza un tableView, basta collegare il MBProgressHUD a UIApplication.shared.delegate .window

per SWIFT 3.0:?

Per mostrare il MBProgressHUD

MBProgressHUD.showAdded(to: ((UIApplication.shared.delegate?.window)!)!, animated: true) 

Per nascondere la MBProgressHUD

MBProgressHUD.hide(for: ((UIApplication.shared.delegate?.window)!)!, animated: true)