菜鸟教程小白 发表于 2022-12-12 10:31:34

ios - 如何通过单击 UIButton IOS7 更新 UILabel 值


                                            <p><p>嗨,在我的应用程序中,我在 <code>UITableView</code> 中显示本地数据库 <code>sqlite</code> 中的数据。在该数据中,我的 <code>UILabel</code> 中显示了整数值。现在想要通过单击按钮来<code>increment</code> 和<code>decrement</code> 我尝试过的值,但它不能正常工作,当再次单击下一行时它只能工作一次它显示旧值请告诉我如何解决这个问题。我为递增和递减动态创建了两个 <code>UIButtons</code>。</p>

<p>我的数据库数据获取代码。</p>

<pre><code>   qtt=[init];
   ;
NSString *sql =;
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, , -1, &amp;statement, nil) == SQLITE_OK) {
   while (sqlite3_step(statement)== SQLITE_ROW) {

      char *field5 = (char *)sqlite3_column_text(statement, 4);
      NSString *field5Str =[initWithUTF8String:field5];

         str2 = [initWithFormat:@&#34;%@&#34;,field5Str];

      ;
      }

   }
</code></pre>

<p>我的 <code>UITableView</code> 显示代码。</p>

<pre><code>   -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
       static NSString *cellIdentifier =@&#34;Cell&#34;;

       displayCell *cell =(displayCell *);
      if (cell == nil) {

         cell = [initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
       }

       cell.ttt.text= ;

       button = ;
       button.frame = CGRectMake(130,25, 40.0, 40.0);
       ;
       [button addTarget:self action:@selector(aMethod:)
       forControlEvents:UIControlEventTouchUpInside];
       button.tag=indexPath.row;
       ;

       button1 = ;
       button1.frame = CGRectMake(200,25, 40.0, 40.0);
       ;
       [button1 addTarget:self action:@selector(aMethod1:)
       forControlEvents:UIControlEventTouchUpInside];
       button1.tag=indexPath.row;
       ;
   if(])
      {
         int value=;
   if (self.check==YES)
       {
          value=value+1;
          str2=;
          NSLog(@&#34;%@&#34;,str2);      
       }
       else
      {
         if (value==1)
      {

      }
      else
         {
             value=value-1;
             str2=;
             NSLog(@&#34;%@&#34;,str2);

         }

      }
      cell.ttt.text=str2;

      }

      return cell;
   }
</code></pre>

<p>我的<code>UIButton</code> Action 方法代码。</p>

<pre><code>-(void)aMethod:(id)sender
{
   self.check=YES;
   int tag=;
   valueString=;
   ;
}
-(void)aMethod1:(id)sender
{
    self.check=NO;
    int tag=;
    valueString=;
    :
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题在于,每次通过 <code>tableView:cellForRowAtIndexPath:</code> 代码时,您都会不断创建按钮。当您第一次调用 <code>reloadData</code> 时,有足够的单元格可供重用,因此您的代码在旧按钮之上添加了新按钮;每次单击 <code>[+]</code> 或 <code>[-]</code> 时都会发生这种情况。</p>

<p>要解决此问题,请根据条件创建按钮。为您的按钮提供不同的标签 - 例如,<code>[+]</code> 为 100,<code>[-]</code> 为 101。这将让您通过标签找到 subview ,并避免在它们已经存在时创建新按钮。由于您需要在 <code>aMethod:</code> 和 <code>aMethod1:</code> 中使用该标签,请将 <code>indexPath.row</code> 的标签放在单元格本身上,然后使用 <code>int tag = </code> 表达式来检索它。</p>

<p>以下是您如何实现此功能的框架:</p>

<pre><code>-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentifier =@&#34;Cell&#34;;

    displayCell *cell =(displayCell *);
    if (cell == nil) {
      cell = [initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    cell.ttt.text= ;

    if ( == nil) {
      button = ;
      button.frame = CGRectMake(130,25, 40.0, 40.0);
      ;
      [button addTarget:self action:@selector(aMethod:)
      forControlEvents:UIControlEventTouchUpInside];
      button.tag=100;
      ;
    }
    if ( == nil) {
      button1 = ;
      button1.frame = CGRectMake(200,25, 40.0, 40.0);
      ;
      [button1 addTarget:self action:@selector(aMethod1:)
      forControlEvents:UIControlEventTouchUpInside];
      button1.tag=101;
      ;
    }
    cell.contentView.tag = indexPath.row;
    // Remove the increment/decrement code, it does not belong here
}
</code></pre>

<p>您的事件处理程序方法如下所示:</p>

<pre><code>-(void)aMethod:(id)sender {
    int tag=[ tag];
    int value=[ integerValue]+1;
    ];
    ;
}

-(void)aMethod1:(id)sender {
    int tag=[ tag];
    int value=[ integerValue]-1;
    if (value &lt;= 0) value = 1;
    ];
    ;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何通过单击 UIButton IOS7 更新 UILabel 值,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24385436/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24385436/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何通过单击 UIButton IOS7 更新 UILabel 值