类似于coc点击好友列表右侧显示的visit等功能按钮的view的处理方法

在当前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


//调用方式 在tableview中某一列

    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];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值