草庐IT

关于objective C:UITextfield 不可编辑的字段

codeneng 2023-03-28 原文

UITextfield uneditable field

我希望在其中包含不可编辑的常量文本的文本字段,例如:

1
ENTER YOUR NAME:

点击文本字段会在 :

之后获得光标

用户也不能删除或编辑"ENTER YOUR NAME:"。

我该如何实现呢?

  • (抱歉。我误解了你的问题。)
  • UITextField 旁边有标签吗?在 UITextField 中包含静态文本似乎是一种糟糕的方法,因为您每次都必须对值进行子串化。


将文本字段的委托设置为 UITextFieldDelegate 实现的实例,并使用 textField:shouldChangeCharactersInRange:replacementString: 方法查看用户是否尝试更改 ENTER YOUR NAME: 字符串:

1
2
3
4
5
6
7
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    //"ENTER YOUR NAME:" occupies the first 16 characters; if the user us trying
    // to change something that is within that 16-character range, say"NO"
    if (range.location < 16) return NO;
    ... check additional conditions here
    return YES;
}

我认为没有办法直接放置光标,但您可以在初始文本的尾随冒号后进行空选择,如本答案中所述。


一种解决方案是检查您的静态内容(静态文本)是否仍然存在,如果不存在,则在 shouldChangeCharactersInRange 中返回 NO。这是一个示例

1
2
3
4
5
6
7
8
9
10
11
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

  NSRange prefixRange = [textField.text rangeOfString:@"ENTER YOUR NAME:"];
  if(suffixRange.location == NSNotFound) {
    return NO;
  }
  // Only characters in the NSCharacterSet you choose will insertable.
  NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:ALPHA] invertedSet];
  NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
  return [string isEqualToString:filtered];
}

阿尔法是
#define ALPHA @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"


我设法以一种有点棘手但简单的方式完成了它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    UIButton *rem = [UIButton buttonWithType:UIButtonTypeCustom];
    rem.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    rem.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
    rem.frame = CGRectMake(0.0f, 210.0f, 300.0f, 40.0f);
    [rem setTitle:@"*X1*" forState:UIControlStateNormal];      
   
    CALayer * layer1 = [rem layer];
    [layer1 setMasksToBounds:YES];
    [layer1 setCornerRadius:8.0];
    [layer1 setBorderWidth:0.0];
    [layer1 setBorderColor:[[UIColor grayColor] CGColor]];
    rem.backgroundColor = [UIColor colorWithPatternImage:image];
    rem.titleLabel.font = [UIFont systemFontOfSize:17.0f];
    rem.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
     
    textField = [[UITextField alloc] initWithFrame:CGRectMake(45.0f, 210.0f, 255.0f, 40.0f)];
    textField.backgroundColor = [UIColor clearColor];
    [_textFields addObject:textField];
    [textField setBorderStyle:(UITextBorderStyleNone)];
    textField.textColor = [UIColor whiteColor];

    [TableControll.view addSubview:rem];
    [TableControll.view addSubview:textField];

基本上我只是创建标题为 UNEDITABLE NAME 的按钮,其大小是理想 textField 的大小。然后我使用 width - size of text 创建没有样式的文本字段并将其添加到顶部。无法选择不可编辑的文本。但我想你可以实现按钮的动作来选择文本字段。


我没有足够的声誉,或者我只是发表评论,但 Omar 的建议是使用 UILabel,在你的情况下会说"输入你的名字:",然后将你的 UITextField 放在远离那个标签,你想控制光标的位置。

为了让它看起来更漂亮,你可以放一些背景文本字段样式的图像(我就是这样做的),或者将 UILabel 的默认背景拉伸到所需的长度,然后确保 UITextField 的子视图位于标签的上方。

有关关于objective C:UITextfield 不可编辑的字段的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  3. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  4. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  5. ruby-on-rails - Sphinx - 何时对字段使用 'has' 和 'indexes' - 2

    我几天前在我的ruby​​onrails2.3.2上安装了Sphinx和Thinking-Sphinx,基本搜索效果很好。这意味着,没有任何条件。现在,我想用一些条件过滤搜索。我有公告模型,索引如下所示:define_indexdoindexestitle,:as=>:title,:sortable=>trueindexesdescription,:as=>:description,:sortable=>trueend也许我错了,但我注意到只有当我将:sortable=>true语法添加到这些属性时,我才能将它们用作搜索条件。否则它找不到任何东西。现在,我还在使用acts_as_tag

  6. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  7. ruby-on-rails - 如何为空白字段编写 rspec? [Rails3.1] - 2

    我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona

  8. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

  9. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  10. ruby-on-rails - Sunspot:如何对具有不同值的多个字段进行全文查询? - 2

    我想用sunspot重现以下原始solr查询q=exact_term_text:fooORterm_textv:foo*ORalternate_text:bar*但我无法通过标准的太阳黑子界面理解这是否可能以及如何实现,因为看起来:fulltext方法似乎不接受多个文本/搜索字段参数我不知道将什么参数作为第一个参数传递给fulltext,就好像我通过了"foo"或"bar"结果不匹配如果我传递一个空参数,我得到一个q=*:*范围过滤器(例如with(:term).starting_with('foo*')(顾名思义)作为过滤器查询应用,因此不参与评分。似乎可以手动编写字符串(或者可能使

随机推荐