Domanda

Per prima cosa vorrei dire che sono veramente nuovo per ipad sviluppo / ipod / iphone, e Objective-C troppo.

Con questo detto, sto cercando di sviluppare una piccola applicazione mira l'iPad, utilizzando Xcode e IB, in fondo, ho una tabella, per ogni UITableViewCell nella tabella, ho aggiunto al accessoryView un pulsante che contiene un immagine.

Ecco il codice:

UIImage *img = [UIImage imageNamed:@"myimage.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect frame = CGRectMake(0.0, 0.0, img.size.width, img.size.height);
button.frame = frame;   // match the button's size with the image size

[button setBackgroundImage:img forState:UIControlStateNormal];

// set the button's target to this table view controller so we can interpret touch events and map that to a NSIndexSet
[button addTarget:self action:@selector(checkButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside];
button.backgroundColor = [UIColor clearColor];
cell.accessoryView = button;

Fin qui, tutto bene, ora il problema è che io voglio un controllo Popover a comparire quando un utente tocca il pulsante sul accessoryView di una cella.

Ho provato questo sul "accessoryButtonTappedForRowWithIndexPath" del tableView:

UITableViewCell *cell = [myTable cellForRowAtIndexPath:indexPath];
UIButton *button = (UIButton *)cell.accessoryView;

//customViewController is the controller of the view that I want to be displayed by the PopOver controller
customViewController = [[CustomViewController alloc]init];

popOverController = [[UIPopoverController alloc]
initWithContentViewController: customViewController];

popOverController.popoverContentSize = CGSizeMake(147, 122);

CGRect rect = button.frame;

[popOverController presentPopoverFromRect:rect inView:cell.accessoryView
permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

Il problema con questo codice è che mostra la Popover nella parte superiore dell'applicazione View, durante il debug ho visto i valori di "rect" e sono:

x = 267
y = 13

quindi penso che è abbastanza evidente il motivo per cui il Popover viene visualizzato in modo sulla vista, quindi la mia domanda è: come posso ottenere i valori corretti per il Popover a comparire appena sotto il pulsante sul accessoryView della cellula?

Inoltre, come potete vedere, sto dicendo che di utilizzare il "cell.accessoryView" per la "INview:" l'attributo, è che va bene

È stato utile?

Soluzione

Prova a usare button.bounds invece di button.frame poiché il rettangolo è relativo al inView.

Si noti inoltre che se la cella è vicino al fondo dello schermo, il popover potrebbe non apparire della dimensione giusta, perché si stanno costringendo la freccia nella direzione Up. Si dovrebbe gestire questo sia manualmente o semplicemente usare qualsiasi.

Altri suggerimenti

[popOverController presentPopoverFromRect:rect inView:cell.accessoryView
permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

Modifica INview: cell.accessoryView a INview: cellula

Ecco una rapida:

let cell = tableView.cellForRowAtIndexPath(indexPath)
let rect = tableView.convertRect(tableView.rectForRowAtIndexPath(indexPath), toView: tableView)


    var popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("loadZone") as! UIViewController
    var nav = UINavigationController(rootViewController: popoverContent)

    nav.modalPresentationStyle = UIModalPresentationStyle.Popover

    var popover = nav.popoverPresentationController

    popoverContent.preferredContentSize = CGSizeMake(100,200)
    popover!.sourceView = tableView
    popover!.sourceRect = rect

    self.presentViewController(nav, animated: true, completion: nil)

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top