gpt4 book ai didi

iphone - UITableCellView 中的 UIButton 图像问题

转载 作者:行者123 更新时间:2023-11-28 20:34:33 25 4
gpt4 key购买 nike

我正在制作一个简单的计时器应用程序。我有一个多行的 uitable。在那个表中,我放了一个 UIButton。一切正常,到目前为止一切顺利,即我看到按钮出现在每一行中。接下来我需要做的是为 UIButton 设置图像,例如如果计时器正在运行,我想在 UIButton 中显示 stop_button_image,如果计时器已经启动,我想将按钮上的 UIImage 设置为 start_button_image

问题是,如果表格被刷新,那么我会得到一个讨厌的回溯,这取决于我放置 UIButton setimage 代码的位置。这是我的代码供引用。

//WORKING CODE: (NOT THAT I WANT)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//TESTING - Button
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

// Try to retrieve from the table view a now-unused cell with the given identifier.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// If no cell is available, create a new one using the given identifier.
if (cell == nil)
{
// Use the default cell style.
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

//TESTING - Button
[button addTarget:self
action:@selector(timerStopStart:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Start/Stop" forState:UIControlStateNormal];
button.frame = CGRectMake(5.0f, 5.0f, 72.0f, 77.0f);
button.tag = indexPath.row;
[cell addSubview:button];

//THIS WORKS IF I PUT THIS HERE
[button setImage:[UIImage imageNamed:@"button_pause.png"] forState:UIControlStateNormal];

}
else
{
//NSLog(@"went here 2");
button = (UIButton *) [cell viewWithTag:indexPath.row];
}

//some other logic
}

//此处代码中断

        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//TESTING - Button
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

// Try to retrieve from the table view a now-unused cell with the given identifier.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// If no cell is available, create a new one using the given identifier.
if (cell == nil)
{
// Use the default cell style.
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

//TESTING - Button
[button addTarget:self
action:@selector(timerStopStart:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Start/Stop" forState:UIControlStateNormal];
button.frame = CGRectMake(5.0f, 5.0f, 72.0f, 77.0f);
button.tag = indexPath.row;
[cell addSubview:button];


}
else
{
//NSLog(@"went here 2");
button = (UIButton *) [cell viewWithTag:indexPath.row];
}

//CODE BREAKS HERE
[button setImage:[UIImage imageNamed:@"button_pause.png"] forState:UIControlStateNormal];

//some other logic
}

问题是,当表格刷新时,它会调用代码为 button = (UIButton *) [cell viewWithTag:indexPath.row] 的部分;我知道这只是一个引用。

这是我在 iOS 模拟器中遇到的错误。我真的很想将该图像代码放在 cell==null 检查之外。任何线索如何做到这一点?

这是我在模拟器中遇到的错误

2012-06-14 12:39:27.246 Timers[5381:10a03] -[UITableViewCell setImage:forState:]: unrecognized selector sent to instance 0x73706e0
2012-06-14 12:39:27.247 Timers[5381:10a03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell setImage:forState:]: unrecognized selector sent to instance 0x73706e0'
*** First throw call stack:
(0x150b052 0x16bbd0a 0x150cced 0x1471f00 0x1471ce2 0x136c6 0x7b5e0f 0x7b6589 0x7a1dfd 0x7b0851 0x75b322

最佳答案

问题可能出在 indexPath.row 为零时。在这种情况下,您调用 viewWithTag:0 但由于默认情况下任何 UIView 的标签都是 0,因此您的单元格的很多 subview 都有可能具有值为 0 的标签,而不仅仅是您的 UIButton .

为避免此问题,请尝试在将常量(例如 100)添加到您的 indexPath.row 之前将其添加到标签中,这样您在第 0 行的按钮将具有标签 100 而不是 0(并且第 1 行的按钮将有标签 101,依此类推……),避免它与任何其他标签为 0 的 subview 混淆。

关于iphone - UITableCellView 中的 UIButton 图像问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11037617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com