菜鸟教程小白 发表于 2022-12-12 11:48:44

ios - 无法使用自定义单元格更改某些属性


                                            <p><p>我正在为我的应用定制一个 UITableViewCell,因为我已经做了几次,所以一切都很好。</p>

<p>现在我想做一些动画,问题来了。</p>

<p>我会尽可能简短地解释它:</p>

<p>我正在做一个字典应用程序。我有一个 View ,其中包含一个 UITableView 和我的自定义单元格 (NTNHistoryCell),此 View 用于显示用户研究的历史记录。</p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;
#import &#34;HistoryItem.h&#34;

@protocol NTNHistoryCellDelegate;
@interface NTNHistoryCell : UITableViewCell&lt;UIGestureRecognizerDelegate&gt;

@property (strong, nonatomic) HistoryItem *historyItem;

@property (strong, nonatomic) IBOutlet UILabel *lblWord;
@property (strong, nonatomic) IBOutlet UILabel *lblDictName;
@property (strong, nonatomic) IBOutlet UILabel *lblTimeStamp;

//variables for editing
@property (strong, nonatomic) IBOutlet UIImageView *imgDeleteBackground;
@property (strong, nonatomic) IBOutlet UIView *frontView;
@property (strong, nonatomic) UIImageView *imgIconDelete;

@property (strong, nonatomic) id&lt;NTNHistoryCellDelegate&gt; delegate;

-(void)initLabels;
@end

@protocol NTNHistoryCellDelegate &lt;NSObject&gt;

@optional

-(void)historyCellIsDeleted:(NTNHistoryCell*)historyCell;

@end
</code></pre>

<p>用户可以向左或向右滑动以删除条目。
单元格上有两个重要的东西:作为 UIImageView 的背景,用于在用户滑动时更改颜色,作为 UIView 的 frontView 包含一些 UILabel,frontView 将在用户滑动时更改其框架。如果用户滑动翻译,则单元格将被删除(对应的条目在数据库中也被删除)。</p>

<p>现在我想做动画让用户知道他们可以在每次加载 tableview 时滑动单元格。我将事件 didEndDisplayingCell 与以下代码一起使用:</p>

<pre><code>-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    //do cell animation to inform user that the cell can be swiped to delete
    //only for the 1st row   
    if(indexPath.row == ((NSIndexPath*)[ lastObject]).row)
    {      
      NTNHistoryCell *cell = (NTNHistoryCell *)];
      CGRect originalFrame = cell.frontView.frame;
      ;
      ;

      //move left

      //not working!
      cell.frontView.frame = CGRectMake(-originalFrame.size.width, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
      cell.lblWord.text = @&#34;text change test&#34;;//not working!
      cell.lblDictName.text = @&#34;text change test&#34;;//not working!
      cell.frontView.backgroundColor = ;//work fine!

      ;
    }
}
</code></pre>

<p>所有代码都不顺利,你可以看我的评论,我可以改变背景颜色,但UILabel的文本和frontView的框架。</p>

<p>我打算向左移动,然后向右移动 frontView。</p>

<p>我哪里做错了?</p>

<p>为了澄清我的话,这是截图(我没有足够的声誉来发布图片):<a href="http://i.stack.imgur.com/dUddJ.png" rel="noreferrer noopener nofollow">http://i.stack.imgur.com/dUddJ.png</a> </p>

<p>编辑:
我解决了。
在@danypata 回复中查看我的评论。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>因此,您需要检测表格 View 何时完成加载过程,然后为第一个可见单元格制作动画。所以这是我的方法:</p>

<pre><code>-(void)viewDidLoad {
;
shouldAnimate = YES;
}

//delegate method
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{if(shouldAnimate) {
       if( == ((NSIndexPath*)[ lastObject]).row){
       //now the table view completes the loading process
       ;
   }
}

-(void)performAnimation {
   shouldAnimate = NO;
   NSIndexPath *firstCelPath = [ objectAtIndex:0]
   YourCustomCell *cell = ;
   [UIView animateWithDuration:0.3 animations:^{
   //do your changes
   }];
}
</code></pre>

<p>我不能 100% 确定这种方法是否可行,但您应该尝试一下。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 无法使用自定义单元格更改某些属性,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17074954/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17074954/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 无法使用自定义单元格更改某些属性