在使用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的位置,並正確彈出窗口。
