UIBarButtonItem不能获取frame

在使用KxMenu这个厉害的控件做竖直列表的时候,发现UIBarButtonItem不能获取到frame,UIBarButtonItem是NSObject的子类,他不是一个uiresponed或者uiview的子类,所以他没有frame属性.

所以当我们要确定弹出框的位置的时候,

UIBarButtonItem *addContactItem = [[UIBarButtonItem alloc] initWithTitle:@"添加"
                                                                   style:UIBarButtonItemStylePlain
                                                                  target:self action:@selector(addContact:event:)];

 在设置action selector的时候多传递一个event参数,然后:

- (void)addContact:(UIBarButtonItem *)sender event:(UIEvent *) event {
     NSArray *menuItems = @[
                         [KxMenuItem menuItem:@"添加朋友" image:nil target:self action:@selector(addFriend)],
                         [KxMenuItem menuItem:@"添加群组" image:nil target:self action:@selector(addGroup)],
                         [KxMenuItem menuItem:@"添加班级" image:nil target:self action:@selector(addClass)],
                         [KxMenuItem menuItem:@"扫一扫" image:nil target:self action:@selector(scan)]
                         ];

    CGRect fromRect = [[event.allTouches anyObject] view].frame;

    fromRect.origin.y += 20;

    [KxMenu showMenuInView:self.view.window
                  fromRect:fromRect
                 menuItems:menuItems];
}

这样我们就可以定位到触发动作的uibarbuttonitem的位置,并正确弹出窗口。

原文地址:https://www.cnblogs.com/ritian/p/6222945.html