style bar apple app iphone objective-c ios

iphone - bar - ¿Cómo agregar UIView en la parte superior de todas las vistas?



apple-mobile-web-app-title (4)

@ MaciekWrocław responde una versión rápida

Swift2

var appDelegate = (UIApplication.sharedApplication().delegate! as! AppDelegate) var backgrView = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height)) backgrView.backgroundColor = UIColor.redColor() backgrView.alpha = 0.6 window?.addSubview(backgrView)

swift3

var appDelegate: AppDelegate? = (UIApplication.shared.delegate as? AppDelegate) var backgrView = UIView(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(UIScreen.main.bounds.size.width), height: CGFloat(UIScreen.main.bounds.size.height))) backgrView.backgroundColor = UIColor.red backgrView.alpha = 0.6 window?.addSubview(backgrView)

y estoy haciendo para mi aplicación sobre la conexión de red en el AppDelegate:

func checkReachabilityUpdateUI() -> Int { let remoteHostStatus = self.reachability?.currentReachabilityStatus() if remoteHostStatus?.rawValue == 0 { let backgrView = UIView(frame: CGRectMake(0, 60, UIScreen.mainScreen().bounds.size.width, 44)) let statusMessage = UILabel(frame: CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.size.width, height: 44)) statusMessage.text = "No internet Connection" statusMessage.textAlignment = .Center statusMessage.textColor = UIColor.whiteColor() backgrView.backgroundColor = UIColor.redColor() backgrView.addSubview(statusMessage) backgrView.tag = 100 window?.addSubview(backgrView) return (remoteHostStatus?.rawValue)! } else { if let viewWithTag = self.window!.viewWithTag(100) { print("Tag 100") viewWithTag.removeFromSuperview() } else { print("tag not found") } return (remoteHostStatus?.rawValue)! } }

Tengo tal código:

@interface Alert : UIView { } /* - (void) initWithTitle:(NSString*)title message:(NSString*)message cancelButtonTitle:(NSString*)cancelButtonTitle otherButtonTitles:(NSString*)buttonTitle,... delegate:(id)delegate; */ @end @implementation Alert - (void) drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextClearRect(context, rect); // Очистим context CGContextSetRGBFillColor(context, 255, 0, 0, 1); CGContextFillRect(context, CGRectMake(20, 20, 100, 100)); } - (void) show { self.center = [[[UIApplication sharedApplication] keyWindow] center]; [[[UIApplication sharedApplication] keyWindow] addSubview:self]; [[[UIApplication sharedApplication] keyWindow] bringSubviewToFront:self]; }

Entonces lo uso así:

- (void)viewDidLoad { [super viewDidLoad]; Alert * alert = [[Alert alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; [alert show]; [alert release]; }

Pero no funciona (quiero ver Alerta sobre todas las demás vistas). ¿Usted me podría ayudar?


Si sabe qué subvista está en la parte superior, use:

UIView* topMostSubView = <your view''s top most subview> [self.view insertSubview:alert aboveSubview:topMostSubView];


También hay otro método.

Agregar el siguiente método en la vista aparecerá para agregar cada vez que oprima el controlador

-(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[[UIApplication sharedApplication] keyWindow] addSubview:<yourViewObject>]; }

Y para eliminar esta vista en la siguiente clase, agregue las siguientes líneas de código

-(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [<yourViewObject> removeFromSuperview]; }


Las soluciones recomendadas que manejan la orientación del dispositivo correctamente son

  • pod AGWindowView Se ocupará automáticamente de cualquier rotación y cambios de marco para que no tengas que preocuparte por eso.
  • lee y sigue la publicación oficial https://developer.apple.com/library/content/qa/qa1688/_index.html
  • Agregue su vista a la primera subvista, en lugar de agregarla a la ventana

    UIWindow* window = [UIApplication sharedApplication].keyWindow; if (!window) window = [[UIApplication sharedApplication].windows objectAtIndex:0]; [[[window subviews] objectAtIndex:0] addSubview:myView];

También puedes agregarlo a la ventana. Sin embargo, no manejará la orientación del dispositivo.

let window = UIApplication.sharedApplication().keyWindow! let view = UIView(frame: CGRect(x: window.frame.origin.x, y: window.frame.origin.y, width: window.frame.width, height: window.frame.height)) window.addSubview(v); view.backgroundColor = UIColor.blackColor()