dropList下拉框,可微调控制在ScrollView上的位置,通过设置下拉框的X、Y值为ScrollView的偏移量即可

//.h

@protocol LJBDropListViewDelegate <NSObject>


/**

 数据源行数

 */

- (NSInteger)ljbDropListView:(UIView *)dropListView;


/**

 数据源内容

 */

- (NSString *)ljbDropListView:(UIView *)dropListView cellForRow:(NSInteger)row;


/**

 选中内容

 */

- (void)ljbDropListView:(UIView *)dropListView didSelectRow:(NSInteger)row;


/**

 默认选中行

 */

@optional

- (NSInteger)defaultShowRowLjbDropListView:(UIView *)dropListView;


@end


@interface LJBDropListView : UIImageView


@property(assign)id<LJBDropListViewDelegate> delegate;


@property(nonatomic,strong)UIView *superMainView;//主控制器


@property(assign)CGFloat edgeX;

@property(assign)CGFloat edgeY;


@property(nonatomic,strong)UITableView *tableView;


- (instancetype)initWithFrame:(CGRect)frame delegate:(id)delegate;


@property(nonatomic,weak)UILabel *resultLab;



//.m

- (instancetype)initWithFrame:(CGRect)frame delegate:(id)delegate {

    if (self = [superinitWithFrame:frame]) {

        self.delegate = delegate;

        self.userInteractionEnabled =YES;

        self.backgroundColor = [UIColorwhiteColor];

        //

        UILabel *resultLab = [[UILabelalloc] initWithFrame:self.bounds];

        self.resultLab = resultLab;

        resultLab.textAlignment =NSTextAlignmentCenter;

        [selfaddSubview:resultLab];

        //

        UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(showTableView:)];

        [selfaddGestureRecognizer:tap];

    }

    returnself;

}


- (void)showTableView:(UITapGestureRecognizer *)tap {

    if (self.tableView.isHidden) {

        [selftapHiddenTableView:nil];

    } else {

        self.bgView = [[UIViewalloc] initWithFrame:self.superMainView.bounds];

        UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(tapHiddenTableView:)];

        [self.bgViewaddGestureRecognizer:tap];

        [self.superMainViewaddSubview:self.bgView];

        [self.bgViewaddSubview:self.tableView];

        [self.tableViewreloadData];

    }

}


- (void)tapHiddenTableView:(UITapGestureRecognizer *)tap {

    [self.bgViewremoveFromSuperview];

    [self.tableViewremoveFromSuperview];

}


- (UITableView *)tableView {

    if (!_tableView) {

        _tableView = [[UITableViewalloc] initWithFrame:CGRectZerostyle:UITableViewStyleGrouped];

        _tableView.delegate =self;

        _tableView.dataSource =self;

    }

    //

    NSInteger count = [self.delegateljbDropListView:self];

    CGFloat tbX =self.frame.origin.x+self.edgeX;

    CGFloat tbY =CGRectGetMaxY(self.frame)+self.edgeY;

    CGFloat tbW =self.frame.size.width;

    CGFloat tbH =0;

    if (count <4) {

        tbH = count * cellHeight;

    } else {

        tbH = 4 *cellHeight;

    }

    _tableView.frame =CGRectMake(tbX, tbY, tbW, tbH);

    

    return_tableView;

}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [self.delegateljbDropListView:self];

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return0;

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    returnnil;

}


- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    UIView *view = [[UIViewalloc] init];

    view.tag = section;

    UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(didSelectRow:)];

    [view addGestureRecognizer:tap];

    view.backgroundColor = [UIColorwhiteColor];

    view.frame =CGRectMake(0,0, tableView.frame.size.width,cellHeight - 1);

    UILabel *label = [[UILabelalloc] init];

    label.frame = view.bounds;

    label.textAlignment =NSTextAlignmentCenter;

    label.text = [self.delegateljbDropListView:selfcellForRow:section];

    label.textColor = [UIColorblackColor];

    label.font =self.resultLab.font;

    [view addSubview:label];

    

    UIView *lineView = [[UIViewalloc] init];

    lineView.frame =CGRectMake(0,CGRectGetMaxY(view.frame), view.frame.size.width,1);

    lineView.backgroundColor =kk_grayBg;

    [view addSubview:lineView];

    

    return view;

}


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

    return0.001;

}


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {

    returncellHeight;

}


- (void)didSelectRow:(UITapGestureRecognizer *)tap {

    UIView *view = tap.view;

    self.resultLab.text = [self.delegateljbDropListView:selfcellForRow:view.tag];

    [self.delegateljbDropListView:selfdidSelectRow:view.tag];

    [selftapHiddenTableView:nil];

}


- (void)setSuperMainView:(UIView *)superMainView {

    _superMainView = superMainView;

    

    if ([self.delegaterespondsToSelector:@selector(defaultShowRowLjbDropListView:)]) {

        NSInteger row = [self.delegatedefaultShowRowLjbDropListView:self];

        self.resultLab.text = [self.delegateljbDropListView:selfcellForRow:row];

        [self.delegateljbDropListView:selfdidSelectRow:row];

    }

    

}

//使用

- (NSInteger)ljbDropListView:(UIView *)dropListView {

    if (dropListView.tag ==1) {

        returnself.array1.count;

    }

    returnself.array2.count;

}


- (NSString *)ljbDropListView:(UIView *)dropListView cellForRow:(NSInteger)row {

    if (dropListView.tag ==1) {

        returnself.array1[row];

    }

    returnself.array2[row];

}


- (void)ljbDropListView:(UIView *)dropListView didSelectRow:(NSInteger)row {

    NSLog(@"tag:%zd,row:%zd",dropListView.tag,row);

}


- (NSInteger)defaultShowRowLjbDropListView:(UIView *)dropListView {

    if (dropListView.tag ==1) {

        return0;

    }

    return2;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++Qt中的复选下拉框是指一个具有下拉列表功能的控件,用户可以在列表中选择多个选项。与普通的下拉框不同,复选下拉框允许用户同时选择多个选项,适用于需要同时选择多个选项的场景。 在Qt中,可以使用QComboBox类来创建复选下拉框。通过设置QComboBox的下拉模式为可编辑(QComboBox::DropList),可以使得下拉框同时显示选项和复选框。下拉列表中的选项可以通过addItem()方法添加,每个选项可以通过设置QStandardItem的Qt::CheckStateRole属性为Qt::Checked或Qt::Unchecked来表示是否被选择。当用户选择或取消选择某个选项时,可以通过itemChanged()信号来进行相应的处理。 使用复选下拉框,可以为用户提供更灵活的选择方式。例如,在一个需要用户选择多个兴趣爱好的场景中,用户可以通过复选下拉框一次性选择多个选项,而不需要分别选择多个单选框或复选框。同时,也可以根据用户的选择来动态调整其他控件的显示或禁用状态,提高用户体验。 总结来说,C++Qt的复选下拉框是一个支持同时选择多个选项的控件,可以通过设置下拉模式和选项的状态来实现。它能够提供更灵活的选择方式,并可以通过信号和槽机制,实现与其他控件的交互。 ### 回答2: C Qt 复选下拉框是一种在 Qt 框架中提供的可同时支持下拉框和复选框功能的控件。它可以让用户在下拉菜单中选择多个选项,这些选项可以被同时选中或取消选中。 使用复选下拉框,我们可以通过以下步骤来实现: 1. 引入必要的头文件: ``` #include <QComboBox> ``` 2. 创建复选下拉框对象: ``` QComboBox *comboBox = new QComboBox(this); ``` 3. 为复选下拉框添加选项: ``` comboBox->addItem("选项1"); comboBox->addItem("选项2"); comboBox->addItem("选项3"); ``` 4. 设置下拉菜单选择模式为多选: ``` comboBox->setSelectionMode(QAbstractItemView::MultiSelection); ``` 5. 获取用户选择的选项: ``` QList<QModelIndex> selectedIndexes = comboBox->view()->selectionModel()->selectedIndexes(); foreach (QModelIndex index, selectedIndexes) { QString selectedOption = index.data().toString(); } ``` 通过上述步骤,我们就可以创建一个功能完善的 c Qt 复选下拉框。用户可以通过下拉菜单选择多个选项,并且通过获取用户选择的选项,我们可以对这些选项进行相应的处理。这使得用户界面更加灵活和易于操作,满足了一些特定场景需要多选功能的需求。 ### 回答3: c Qt 复选下拉框是一种可以同时选择多个选项的下拉框控件。它结合了复选框和下拉框的功能,可以让用户在下拉框中选择多个选项,以实现更灵活的选择。 在 Qt 中,可以使用 QComboBox 控件的 setEditable() 方法将其设置为可编辑模式,再通过 setView() 方法将其设置为 QListView,以实现复选下拉框的效果。然后可以使用 QStandardItemModel 来给下拉框添加选项。 在添加选项时,可以通过 QStandardItem 的 setCheckable() 和 setChecked() 方法设置选项是否可勾选以及是否默认选中。通过设置这些属性,可以根据需求来创建复选下拉框中的选项。 在使用复选下拉框时,可以通过 QStandardItemModel 的 itemChanged() 信号来捕获用户选择或取消选择选项的操作,从而实时获取选中的选项。 此外,还可以通过 QComboBox 的 currentTextChanged() 信号来监听用户选择的选项,并根据选择结果进行相应的处理。 总之,c Qt 复选下拉框是一种强大的控件,可以方便地实现多选功能。通过使用 QComboBox、QListView、QStandardItemModel 等类,我们可以在 Qt 中轻松地创建和使用复选下拉框,满足不同的用户需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值