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