我有一个table view
(例如:20行)。我使用了custom table view cell
table view
。
在此table view cell
中,有labels
,一个button
和hidden view (UIView)
。
我在button
内action
hide/show
写了hidden view
custom table view cell class
。它运行正常。但它影响到其他{{} 1}}在表格视图中。这意味着,当我点击第一行中的按钮时,隐藏的视图显示,并且在rows
时,它可以在表格视图的其他一些行中看到。
同时(scroll down
时),我想hide/show
和increase
行高(仅点击行/单元格)。出了什么问题。下面是我的代码和一些屏幕截图,以获得一个想法。
注意:当单击每个单元格中的展开按钮时,单元格会自动展开/增加。
这是decrease
类中hide
和show
的{{1}}。
hidden view
出了什么问题,希望你对此有所帮助。
高级:如果有单向隐藏/显示和扩展(增加行高)单击每个单元格的展开按钮,那就太棒了。
答案 0 :(得分:3)
为我自己找到适合的解决方案。感谢所有支持我的人。
执行以下操作。
NSMutableArray
Which
中创建button
以保留Which
row
clicked
。Button
中的Custom table view cell
时,检查index path
中的already
是mutable array
,如果是already
在其中,然后romove
,否则添加它。cellforrowatindexpath
方法中,检查nsmutable array
并检查indexpath.row
是exist
还是not
。exists
,请不要隐藏,否则hide
,这完美无缺。这是表视图的实现。 .m
档案
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 25;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FirstTableViewCell *cells = [tableView dequeueReusableCellWithIdentifier:@"tvcell" forIndexPath:indexPath];
NSString *theIndexpath = [NSString stringWithFormat:@"%ld", (long)indexPath.row];
//here check whether it is exists or not.
if ([chekcme containsObject:theIndexpath])
{
cells.insideCollectionView.hidden = false;
}
else
{
cells.insideCollectionView.hidden = true;
}
[cells setColletionData:bbarray];
[cells.expandMe addTarget:self action:@selector(runs:) forControlEvents:UIControlEventTouchUpInside];
//in here set the tag of the button to indexpath.row
cells.expandMe.tag = indexPath.row;
return cells;
}
//this is the action for the button inside the custom tableview cell.
- (IBAction)runs:(UIButton *)sender{
NSString *myob = [NSString stringWithFormat:@"%li", (long)sender.tag];
NSLog(@"%@",myob);
if ([chekcme containsObject:myob]) {
[chekcme removeObject:myob];
}
else
{
[chekcme addObject:myob];
}
NSLog(@"%@", chekcme);
//keep in mind to reload the table view here.
[self.maintableView reloadData];
}
注意:checkme是NSMutableArray,用于保存用户点击的对象。
答案 1 :(得分:1)
第1步: - 假设您在标签值,按钮和隐藏视图等行中显示数据。在数组ex中添加一个参数。 isViewNeedToShow ,默认填写该值 FALSE 。
第2步: - 在您的按钮操作之后,您将indexPath.row作为索引路径中行的单元格中的标记值传递,因此在按钮操作中更改数组值参数 isViewNeedToShow == TRUE ,然后重新加载表格视图的部分。例如: -
Item *tempItem = yourArray[sender.tag];
tempItem. isViewNeedToShow = tempItem. isViewNeedToShow ? FALSE : TRUE;
**For particular row update** :-
[yourTableView beginUpdates];
[yourTableView reloadRowsAtIndexPaths:@[sender.tag, 0] withRowAnimation:UITableViewRowAnimationNone];
[yourTableView endUpdates];
第3步: - 如果要展开表格单元格,则必须计算包含视图,标签等项目的行高。
Or if you are using auto layouts in your project use UI Table View Delegate Methods
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
我希望您的问题能得到解决。
答案 2 :(得分:0)
我需要在tableview数据源方法中查看代码,但我认为以下内容可以解决您的问题:
问题#1:我假设您正在为您的单元格使用deque,这会导致在滚动时重复使用单元格。我建议你保持每个单元格的状态(例如:isExpanded)并在cellForRowAtIndex中相应地配置单元格:
问题#2:使用相同的' IsExpanded'在heightForRowAtIndex:并在状态更改为#E; IsExpanded'
时,为您的单元格调用reloadRowsAtIndexPaths:答案 3 :(得分:0)
您需要重新加载所有表而不是单个单元格 你可以使用下面的代码
tbl_name .beginUpdates(
tbl_name .endUpdates()
<强>更新强>
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == userselectedrow // save selectecd cell index if you want to only one cell expand otherwise save selected row in array and compare to here
{
return incrementheight // increment row height here
}
else
{
return decrementheight // decrement row height
}
}
- (IBAction)hideshow:(UIButton*)sender {
CGPoint point11=[sender convertPoint:CGPointZero toView:tbl_calender];
NSIndexPath index_pathGlobal =[tbl_calender indexPathForRowAtPoint:point11]; // save index_pathGlobal
}
希望这会对你有所帮助
答案 4 :(得分:0)
您应该首先在cellForRowAtIndexPath中设置有关视图的状态。希望它会对你有所帮助。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// here you have to maintain the status about the current cell. whether it is hidden or not.
cell.insideCollectionView.hidden = status;
}
答案 5 :(得分:0)
该按钮会影响多个rows
,因为您将BOOL
存储在collectionView
的{{1}}中。
当cell
重新用于其他cell
时,row
将cell
根据之前用于的hidden/shown
的状态row
。正如已经建议的那样,您需要为state
的每一个rows
存储此cell
,并在dataSource
准备#include <stdio.h>
main() {
int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;
printf("The original array elements are :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
n = n + 1;
while( j >= k){
LA[j+1] = LA[j];
j = j - 1;
}
LA[k] = item;
printf("The array elements after insertion :\n");
for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
}
时进行相应设置。
答案 6 :(得分:0)
switch selectedIndexPath {
case nil:
selectedIndexPath = indexPath
default:
if selectedIndexPath! == indexPath {
selectedIndexPath = nil
} else {
selectedIndexPath = indexPath
}
}
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
行高
if selectedIndexPath != nil {
if selectedIndexPath == indexPath {
return estimatedHeight
}
}
return 44
selectedIndexPath是NSIndexPath的一个属性。 希望这可以帮到你。