Pregunta

En primer lugar me gustaría decir que estoy realmente nuevo al ipad desarrollo / iPod / iPhone, y para Objective-C también.

Con eso se dice, estoy tratando de desarrollar una pequeña aplicación dirigida al iPad, usando Xcode y IB, básicamente, tengo una tabla, para cada UITableViewCell en la tabla, he añadido a la accessoryView un botón que contiene una imagen.

Este es el código:

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;

Hasta ahora, todo va bien, ahora el problema es que quiero que aparezca un control Popover cuando un usuario pulsa el botón de la accessoryView de una célula.

He intentado esto en el "accessoryButtonTappedForRowWithIndexPath" de la 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];

El problema con este código es que muestra la Popover en la parte superior de la vista de aplicación, durante la depuración vi los valores de "rect" y son:

x = 267
y = 13

así que creo que es bastante obvio por qué la Popover se está mostrando tan arriba en la vista, por lo que mi pregunta es, ¿cómo puedo obtener los valores correctos para la Popover que aparecen justo debajo del botón de la accessoryView de la célula?

Además, como se puede ver, estoy diciéndole que la utilice el "cell.accessoryView" para el "inView:"? Atributo, es que está bien

¿Fue útil?

Solución

Trate de usar button.bounds en lugar de button.frame ya que el rect es relativa a la inView.

Tenga en cuenta también que si la célula está cerca de la parte inferior de la pantalla, el popover no aparezca en el tamaño adecuado, ya que están obligando a la flecha en la dirección hacia arriba. O se debe manejar de forma manual o simplemente utilizar Any.

Otros consejos

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

Cambio de inView: cell.accessoryView a inView: célula

aquí está para SWIFT:

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)

introducir descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top