菜鸟教程小白 发表于 2022-12-13 07:28:31

ios - NSMutableAttributedString 转换为字符串,同时保持格式


                                            <p><p>我想为我的表格 View 分配一个标题标题,但我希望标题分两行。第二行的字体应该比第一行小。</p>

<p>我正在尝试使用<code>NSMutableAttributedString</code>,但是在方法中:</p>

<pre><code>-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
</code></pre>

<p>但它返回一个 <code>NSString</code> 而不是 <code>NSMutableAttributedString</code>。 </p>

<p>有什么方法可以在保持字符串格式的同时将 <code>NSMutableAttributedString</code> 转换为 <code>NSString</code>? </p>

<p>这是我的代码:</p>

<pre><code>-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    NSString *title = @&#34;&#34;;
    title = @&#34;Top Line \n&#34;;
    if(_favouriteLocations.count == 0){
      title = ;
    }
    NSMutableAttributedString *attString =[ initWithString:title];
    NSRange range = ;

    ;

   NSLog(@&#34;%@&#34;, attString);
   title = ;

   return title;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>使用 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDataSource/tableView:titleForHeaderInSection:" rel="noreferrer noopener nofollow"><code>tableView:titleForHeaderInSection:</code></a> 无法做到这一点方法。
您需要使用 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:viewForHeaderInSection:" rel="noreferrer noopener nofollow"><code>tableView:viewForHeaderInSection:</code></a>这是一个 <a href="https://developer.apple.com/documentation/uikit/uitableviewdelegate" rel="noreferrer noopener nofollow"><code>UITableViewDelegate</code></a>方法并返回 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html#//apple_ref/occ/cl/UILabel" rel="noreferrer noopener nofollow"><code>UILabel</code></a>与 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html#//apple_ref/occ/instp/UILabel/attributedText" rel="noreferrer noopener nofollow"><code>attributedText</code></a>设置</p>

<pre><code>-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    NSString *title = @&#34;&#34;;
    title = @&#34;Top Line \n&#34;;
    if(_favouriteLocations.count == 0){
      title = ;
    }
    NSMutableAttributedString *attString =[ initWithString:title];
    NSRange range = ;

    ;

   UILabel *titleLabel = ;
   titleLabel.attributedText = attString;

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

<p>如果您有很多部分,您也可以使用较新的 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewHeaderFooterView_class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewHeaderFooterView/textLabel" rel="noreferrer noopener nofollow"><code>UITableViewHeaderFooterView</code></a>类和 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/dequeueReusableHeaderFooterViewWithIdentifier:" rel="noreferrer noopener nofollow">dequeue</a>那。该 View 具有 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewHeaderFooterView_class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewHeaderFooterView/textLabel" rel="noreferrer noopener nofollow"><code>textLabel</code></a>属性,就像上面一样,您可以在其上设置 <code>attributedText</code> 。它的代码多一点,但效率更高,因为您不必每次都返回新创建的 View 。</p>

<pre><code>static NSString *const HeaderCellId = @&#34;header_id&#34;;

-(void)viewDidLoad
{
    ;

    // Setup table view
    forHeaderFooterViewReuseIdentifier:HeaderCellId];
}

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    NSString *title = @&#34;&#34;;
    title = @&#34;Top Line \n&#34;;
    if(_favouriteLocations.count == 0){
      title = ;
    }
    NSMutableAttributedString *attString =[ initWithString:title];
    NSRange range = ;

    ;

    UITableViewHeaderFooterView *view = ;

    view.textLabel.attributedText = attString;

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

<p><em>编辑</em>:</p>

<p>正如@PabloRomeu 在评论中指出的那样,<code>tableView:viewForHeaderInSection:</code> 仅在 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:heightForHeaderInSection:" rel="noreferrer noopener nofollow"><code>tableView:heightForHeaderInSection:</code></a> 时有效实现返回一个非零值。</p>

<pre><code>-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 80;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSMutableAttributedString 转换为字符串,同时保持格式,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23132831/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23132831/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSMutableAttributedString 转换为字符串,同时保持格式