Ram*_*Ram 206 iphone objective-c interface-builder uitableview ios
我正在开展一个项目,我必须预先选择一个特定的单元格.
我可以预先选择一个单元格-willDisplayCell
,但是当用户点击任何其他单元格时我无法取消选择它.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
[cell setSelected:YES];
}
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
[materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
你能帮我吗?
Sai*_*n K 398
使用此代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Change the selected background view of the cell.
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//Change the selected background view of the cell.
tableView.deselectRow(at: indexPath, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
小智 116
在表视图委托中使用以下方法didSelectRowAtIndexpath
(或从任何地方)
[myTable deselectRowAtIndexPath:[myTable indexPathForSelectedRow] animated:YES];
Run Code Online (Sandbox Code Playgroud)
小智 38
试试这个:
for (NSIndexPath *indexPath in tableView.indexPathsForSelectedRows) {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
jfa*_*jay 28
请检查委托方法是否正确.例如;
-(void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
对于
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
Tho*_*oom 25
为此在Swift中进行扩展可能很有用.
斯威夫特4:
Swift扩展(例如在UITableViewExtension.swift文件中):
import UIKit
extension UITableView {
func deselectSelectedRow(animated: Bool)
{
if let indexPathForSelectedRow = self.indexPathForSelectedRow
{
self.deselectRow(at: indexPathForSelectedRow, animated: animated)
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用例如:
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(animated)
self.tableView.deselectSelectedRow(animated: true)
}
Run Code Online (Sandbox Code Playgroud)
And*_*ndo 22
斯威夫特4:
tableView.deselectRow(at: indexPath, animated: true)
Run Code Online (Sandbox Code Playgroud)
tBu*_*Bug 12
这是Swift 4的解决方案
in tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
Run Code Online (Sandbox Code Playgroud)
只需添加
tableView.deselectRow(at: indexPath, animated: true)
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力
例:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
//some code
}
Run Code Online (Sandbox Code Playgroud)
Dre*_*w C 11
除了将单元格设置为选中之外,还需要通知tableView已选择单元格.添加-tableView:selectRowAtIndexPath:animated:scrollPosition:
对您的willDisplayCell:
方法的调用:您将能够正常取消选择它.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte = (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
// SELECT CELL
[cell setSelected:YES];
// TELL TABLEVIEW THAT ROW IS SELECTED
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
Run Code Online (Sandbox Code Playgroud)
一定要使用UITableViewScrollPositionNone来避免奇怪的滚动行为.
这应该工作:
[tableView deselectRowAtIndexPath:indexpath1 animated:NO];
Run Code Online (Sandbox Code Playgroud)
只需确保materialTable和tableView指向同一个对象.
材料是否连接到Interface Builder中的tableView?
根据saikirans解决方案,我写了这个,这对我有帮助.在.m文件中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(selectedRowIndex && indexPath.row == selectedRowIndex.row) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
selectedRowIndex = nil;
}
else { self.selectedRowIndex = [indexPath retain]; }
[tableView beginUpdates];
[tableView endUpdates];
}
Run Code Online (Sandbox Code Playgroud)
并在头文件上:
@property (retain, nonatomic) NSIndexPath* selectedRowIndex;
Run Code Online (Sandbox Code Playgroud)
我也不是很有经验,所以要仔细检查内存泄漏等.
如果要在第一次单击时选择任何表格单元格,并在第二次单击时取消选择,则应使用以下代码:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.selectedIndexPath &&
[indexPath compare:self.selectedIndexPath] == NSOrderedSame) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
self.selectedIndexPath = nil;
}
else {
self.selectedIndexPath = indexPath;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
斯威夫特4:
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
let cell = tableView.cellForRow(at: indexPath)
if cell?.isSelected == true { // check if cell has been previously selected
tableView.deselectRow(at: indexPath, animated: true)
return nil
} else {
return indexPath
}
}
Run Code Online (Sandbox Code Playgroud)