在当前scrollview上加一层view 代码添加 计算当前条目的位置 设置当前添加view的位置 在view内部添加想要的按钮 为按钮添加点击处理事件
以上的方法有弊端 修改后如下
#import "PopupView.h"
@interface UserMenuView :PopupView<UIGestureRecognizerDelegate>
@property (nonatomic,retain) IBOutletUIButton *button1;
@property (nonatomic,retain) IBOutletUIButton *button2;
@property (nonatomic,retain) IBOutletUIButton *button3;
@property (nonatomic,retain) IBOutletUIButton *button4;
@property (nonatomic,retain) IBOutletKeyUILabel *label1;
@property (nonatomic,retain) IBOutletKeyUILabel *label2;
@property (nonatomic,retain) IBOutletKeyUILabel *label3;
@property (nonatomic,retain) IBOutletKeyUILabel *label4;
// Info must contain userid
// If contains legion_id and legion_rank_name to enable legion method
// From can be "chat" "legion" or "friendlist" to identify where the menu was created from, so buttons are adjusted accordingly
+ (void) showUserMenuNextToView:(CGRect)rect withInfo:(NSDictionary *)info from:(NSString *)from;
@end
#import "UserMenuView.h"
#import "LegionManager.h"
@implementation UserMenuView{
NSMutableArray *_buttonSelector;
UITapGestureRecognizer *_recognizer;
}
+ (void) showUserMenuNextToView:(CGRect)rect withInfo:(NSDictionary *)info from:(NSString *)from{
UserMenuView *menu = [[UIManagersharedUIManager] createViewWithClass:@"UserMenuView"];
[menu show];
[menu setUserInfo:infofrom:from];
CGPoint origin;
if([fromisEqualToString:@"legion"]){
origin = CGPointMake(rect.origin.x + rect.size.width/2, rect.origin.y + rect.size.height /2);
}else{
origin = CGPointMake(rect.origin.x + rect.size.width -10 * Content_Size, rect.origin.y + rect.size.height / 2);
}
// bring menu back in to the screen if necessary
float offsetx = [CCDirectorsharedDirector].winSize.width - (origin.x + menu.frame.size.width / 2);
float offsetytop = origin.y - menu.frame.size.height / 2;
float offsetybottom = [CCDirectorsharedDirector].winSize.height - (origin.y + menu.frame.size.height / 2);
origin = CGPointMake(origin.x + (offsetx < 0 ? offsetx : 0), origin.y + (offsetytop <0 ? offsetytop : 0) + ((offsetybottom <0 ? offsetybottom : 0)));
menu.center = origin;
}
- (void) awakeFromNib{
[superawakeFromNib];
_buttonSelector = [[NSMutableArrayalloc] init];
self.button1.hidden =YES;
self.button2.hidden =YES;
self.button3.hidden =YES;
self.button4.hidden =YES;
self.label1.hidden =YES;
self.label2.hidden =YES;
self.label3.hidden =YES;
self.label4.hidden =YES;
_recognizer = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(close)];
_recognizer.delegate =self;
_recognizer.numberOfTouchesRequired =1;
[_recognizersetCancelsTouchesInView:NO];
[[CCDirectorsharedDirector].viewaddGestureRecognizer:_recognizer];
}
- (void) dealloc{
[_buttonSelectorrelease];
[[CCDirectorsharedDirector].viewremoveGestureRecognizer:_recognizer];
[_recognizerrelease];
[superdealloc];
}
- (void) setUserInfo:(NSDictionary *)info from:(NSString *)from{
[_buttonSelectorinsertObject:@"visit"atIndex:0];
self.label1.text =@"tid_legion_visit";
self.label1.hidden =NO;
self.button1.hidden =NO;
if([[info objectForKey:@"legion_id"]isEqualToString:@""]){
[_buttonSelectorinsertObject:@"invite"atIndex:1];
self.label2.text =@"tid_user_menu_invite";
self.label2.hidden =NO;
self.button2.hidden =NO;
}else{
if([[info objectForKey:@"legion_id"]isEqualToString:[GameManagersharedGameManager].context.usersave.legion_id]
&& [from isEqualToString:@"legion"]){
int my_rank =legionClassToInt([GameManagersharedGameManager].context.usersave.legion_class);
int user_rank = legionClassToInt([info objectForKey:@"legion_class"]);
if(my_rank != user_rank && my_rank > user_rank){
[_buttonSelectorinsertObject:@"promote"atIndex:1];
self.label2.text =@"tid_user_menu_promote";
self.label2.hidden =NO;
self.button2.hidden =NO;
[_buttonSelectorinsertObject:@"demote"atIndex:2];
self.label3.text =@"tid_user_menu_demote";
self.label3.hidden =NO;
self.button3.hidden =NO;
[_buttonSelectorinsertObject:@"kick"atIndex:3];
self.label4.text =@"tid_user_menu_kick";
self.label4.hidden =NO;
self.button4.hidden =NO;
}
}elseif(![[info objectForKey:@"legion_id"]isEqualToString:[GameManagersharedGameManager].context.usersave.legion_id]){
[_buttonSelectorinsertObject:@"legion"atIndex:1];
self.label2.text =@"tid_user_menu_legion";
self.label2.hidden =NO;
self.button2.hidden =NO;
}
}
}
- (void) close{
[[CCDirectorsharedDirector].viewremoveGestureRecognizer:_recognizer];
[superclose];
}
- (void) clickButton:(id)sender{
if(sender ==self.button1)
[selfperformSelectorOnMainThread:NSSelectorFromString([_buttonSelectorobjectAtIndex:0])withObject:nilwaitUntilDone:YES];
elseif(sender == self.button2)
[selfperformSelectorOnMainThread:NSSelectorFromString([_buttonSelectorobjectAtIndex:1])withObject:nilwaitUntilDone:YES];
elseif(sender == self.button3)
[selfperformSelectorOnMainThread:NSSelectorFromString([_buttonSelectorobjectAtIndex:2])withObject:nilwaitUntilDone:YES];
elseif(sender == self.button4)
[selfperformSelectorOnMainThread:NSSelectorFromString([_buttonSelectorobjectAtIndex:3])withObject:nilwaitUntilDone:YES];
}
#pragma mark - UIGestureRecognizerDelegate
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
// 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
if ([NSStringFromClass([touch.viewclass]) isEqualToString:@"UserMenuView"]) {
returnNO;
}
return YES;
}
// 访问玩家基地
- (void) visit{
CCLOG(@"visit");
[selfclose];
}
// 查看玩家所属军团信息
- (void) legion{
CCLOG(@"view legion");
[selfclose];
}
// 邀请玩家加入自己的军团
- (void) invite{
CCLOG(@"invite");
// NSString * legion_id = [GameManager sharedGameManager].context.usersave.legion_id;
// NSString * legion_name = [[GameManager sharedGameManager].context.clanInfo objectForKey:@"name"];
// NSString * userid = [selectedUserPopData objectForKey:@"userid"];
// NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:legion_id,@"legion_id",legion_name,@"legion_name",userid,@"target_id", nil];
// [[GameManager sharedGameManager].context.api send:@"api_legion_invite" params:params block:^(id data) {
// CCLOG(@"invite result data%@",data);
// }];
[selfclose];
}
// 提升玩家军团的rank
- (void) promote{
[LegionManagerapi_legion_promote:nil];
CCLOG(@"promote");
[selfclose];
}
// 降级玩家军团的rank
- (void) demote{
[LegionManagerapi_legion_degrade:nil];
CCLOG(@"demote");
[selfclose];
}
// 将玩家提出公会
- (void) kick{
[LegionManagerapi_legion_kick:nil];
CCLOG(@"kick");
[selfclose];
}
@end
CGRect rect = [tableViewrectForRowAtIndexPath:indexPath];
rect = [tableView convertRect:rect toView:[CCDirectorsharedDirector].view];
NSMutableDictionary * dic = [[NSMutableDictionaryalloc] initWithDictionary:[_memberso bjectAtIndex:indexPath.row]];
[dic setObject:[_legionInfoobjectForKey:@"legion_id"]forKey:@"legion_id"];
[UserMenuViewshowUserMenuNextToView:rect withInfo:dicfrom:@"legion"];
[dic release];