自定义控制器类作为Sensible TableView中的自定义单元格?

时间:2012-11-23 12:02:15

标签: objective-c ios5 uitableview frameworks nsuserdefaults

我目前使用Sensible TableView Framework为新应用创建搜索过滤器掩码。 一切正常,但最新的Screendesign提出了新的问题。

现在需要选择最小值和最大值之间的范围。我们现在必须创建一种新类型的自定义RangeSlider(UISliderView熟悉),而不是使用两个数字文本字段来定义范围。现在我创建了RangeSlider(带有两个缩略图的滑块)作为CustomClass,没有xib文件。我现在必须在tableview中将它作为customCell实现吗? 仍然无法通过STV弄清楚如何做到这一点。

我的RangeSlider需要设置一些属性:

  • float minimumValue;
  • float maximumValue;
  • float minimumRange;
  • float selectedMinimumValue;
  • float selectedMaximumValue;

并通过更改属性值来响应用户交互。

Range Slider: That's how it looks like.

我的问题简而言之: 如何在没有xib文件的情况下将RangeSlider类实现为CustomCell? 并且..是否可以使用SCUserDefaultsDefinition跟踪我的customCell的userInteraction?

这就是我创建STV的方式:

SCUserDefaultsDefinition *userDefaultsDef = [SCUserDefaultsDefinition definitionWithDictionaryKeyNamesString:@"Search Filter:(gender,ageRangeSlider,zip,country)"];
SCPropertyDefinition *genderDef = [userDefaultsDef propertyDefinitionWithName:@"gender"];
genderDef.title = @"Gender";
genderDef.required = TRUE;
genderDef.type = SCPropertyTypeSelection;
genderDef.attributes = [SCSelectionAttributes attributesWithItems:[NSArray arrayWithObjects:@"f", @"m", nil] allowMultipleSelection:NO allowNoSelection:NO];
genderDef.autoValidate = TRUE;

/*#### CUSTOMCELL IMPLEMENTATION HERE #### */

SCPropertyDefinition *zip = [userDefaultsDef propertyDefinitionWithName:@"zip"];
zip.title = @"Zip-Code";
zip.type = SCPropertyTypeNumericTextField;
zip.attributes = [SCNumericTextFieldAttributes attributesWithMinimumValue:[NSNumber numberWithInt:01] maximumValue:[NSNumber numberWithInt:99] allowFloatValue:NO];
[self.tableViewModel generateSectionsForUserDefaultsDefinition:userDefaultsDef];
SCTableViewSection *formSection = [self.tableViewModel sectionAtIndex:0];
formSection.cellActions.valueChanged = ^(SCTableViewCell *cell, NSIndexPath *indexPath)
{
     NSLog(@"\n\n*********** Key Binding Log ***********\n");
     NSLog(@"Value: %@\n", [cell boundValue]);
};

如果有人可以提供帮助,那会很棒! 我真的很感激!如果您需要更多信息,请告诉我。

谢谢,

拉​​斯 (我的英语不好)

1 个答案:

答案 0 :(得分:0)

好的,问题解决了!

以下是解决方案: 要在STV中将CustomCell添加为CustomCell,您必须使用Classname / Nibname和customControl的标记定义SCCustomPropertyDefinition作为objectBinding。

SCUserDefaultsDefinition *userDefaultsDef = [SCUserDefaultsDefinition definitionWithDictionaryKeyNamesString:@"Search Filter:(gender,ageRangeSlider,zip,country)"];

SCCustomPropertyDefinition * customControl = [SCCustomPropertyDefinition definitionWithName:@"ageRangeSlider" uiElementClass:[CustomControlClass class] objectBindingsString:@"1:selectedRange;"];
[userDefaultsDef insertPropertyDefinition:customControl atIndex:1];

创建新的PropertyDefinition并将其添加到UserDefaultsDefinition后,可以使用PropertyDefinition中的ObjectBindingString(@“1:selectedRange;”)在CustomControlClass中配置Response属性。 该数字表示自定义单元格中每个控件的IB标记,而String表示要用作此Control的ResponseValue的属性。

希望这可能有助于其他开发者。